4 votes

Changement du répertoire de travail rapide via le script de Python

Est-il possible de changer le répertoire de travail de l'invite de commande Windows via le script de Python ?

par exemple

>> cd
>> c:\windows\system32
>> make_decision_change_dir.py
>> cd
>> c:\windows

J'ai essayé plusieurs choses qui ne fonctionnent pas :

import os
os.chdir(path)

import os, subprocess
subprocess.Popen("chdir /D \"%s\"" %path, shell=True)

import os, subprocess
subprocess.Popen("cd \"%s\"" %path, shell=True)

import os, subprocess
subprocess.Popen("CD=\"%s\"" %path, shell=True)

D'après ce que je comprends et observe, ces opérations modifient le répertoire de travail du processus en cours - qui est le processus Python et non l'invite à partir de laquelle il s'exécute.

Gracias.

UPDATE

Le chemin vers lequel je voudrais changer est dynamique (en fonction du projet sur lequel je travaille, le chemin complet vers un emplacement de construction change), c'est pourquoi je voulais coder une solution en Python plutôt que de bidouiller avec un fichier batch Windows.

UPDATE

J'ai fini par pirater un fichier batch pour faire cela ;( Merci à tous.

3voto

Dave Webb Points 90034

Je ne comprends pas bien ce que vous voulez faire ici. Voulez-vous un python script que vous pouvez exécuter à partir d'une invite de commande Windows et qui changera le répertoire de travail de la session de commande Windows ?

Si oui, je suis sûr à 99,9% que c'est impossible. Comme vous l'avez dit vous-même, le python.exe est un processus distinct de celui de Windows cmd.exe et tout ce que vous faites dans Python n'affectera pas l'invite de commande.

Il y a peut-être quelque chose que vous pouvez faire via l'API Windows en envoyant des frappes au clavier à Windows ou autre, mais ce serait assez fragile.

Les deux seules options pratiques auxquelles je peux penser consistent à envelopper votre script Python dans un fichier Batch :

  1. Sortez votre répertoire désiré du script de Python, lisez la sortie dans votre fichier Batch et CD vers celui-ci.
  2. Lancez votre script Python à partir d'un fichier batch, permettez à votre script Python de démarrer une nouvelle cmd.exe et obtenir le fichier Batch pour fermer la fenêtre de commande originale.

2voto

Ned Batchelder Points 128913

J'ai un script Python pour faciliter le déplacement dans une arborescence de fichiers : xdir.py

En bref, j'ai un fichier xdir.py, qui écrit les commandes Windows sur stdout :

# Obviously, this should be more interesting..
import sys
print "cd", sys.argv[1]

Puis un fichier xdir.cmd :

@echo off
python xdir.py %* >%TEMP%\__xdir.cmd
call %TEMP%\__xdir.cmd

Puis je crée un alias de doskey :

doskey x=xdir.cmd $*

Le résultat final est que je peux taper

$ x subdir

et changez dans le sous-répertoire.

Le script dont j'ai fait le lien ci-dessus fait beaucoup plus, y compris se souvenir de l'historique, maintenir une pile de répertoires, accepter des raccourcis pour les répertoires, et ainsi de suite.

1voto

cdleary Points 18869

Comme les gens l'ont mentionné, les processus enfants (i.e. votre programme) ne peuvent pas changer le répertoire de travail courant d'un processus parent (i.e. le terminal). C'est pourquoi vous avez besoin des deux étapes que tout le monde décrit. Dans la plupart des shells, il est possible de créer une macro ou une fonction pour réaliser cette fonctionnalité en deux étapes.

Par exemple, dans bash vous pouvez créer un alias unique pour calculer le chemin et changer le répertoire de travail actuel, de manière similaire à ce qui est fait avec @S.Lott décrit pour Windows :

alias my_cd='TMP=`compute_path.py`; cd $TMP;'

Notez que le cd est toujours interprétée dans le processus parent (le terminal), qui a la possibilité de modifier son propre répertoire de travail actuel.

1voto

S.Lott Points 207588

Une solution courante est un script en deux parties.

La première partie est Python, qui crée un fichier temporaire .BAT contenant la commande CD appropriée.

La deuxième partie est le fichier temporaire .BAT.

fancycd.bat

python figurethepath.py >temp.bat
temp.bat

0voto

hi bye Points 31
imoprt os
os.system("start cmd.exe /k \"cd /d c:\\windows\\system32 & python make_decision_change_dir.py\"")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X