J'écris un script de test censé CD du répertoire actuel en une nouvelle si ce chemin est confirmé pour exister et être un répertoire mon dilemme est que je Je ne sais pas comment passer correctement une variable dans une commande de sous-processus ou si je devrais utiliser ou non appeler ou non. Lorsque j'essaie le code ci-dessus, il revient avec une erreur disant que pas de tel fichier ou répertoire "cd ../c / bin /" code>. J'ai besoin de parcourir un répertoire à partir du répertoire actuel, alors je peux saisir
/ etc code> et lire des fichiers là-bas. Tout conseil? P> p>
4 Réponses :
Vous devez utiliser os.chdir (répertoire) code>, puis appeler pour ouvrir votre processus. J'imagine que ce serait plus simple et lisible p>
C'est plus que simplement "simple" et "lisible": c'est la seule façon possible que fonctionne réellement i>. Faire un CD code> dans un sous-processus n'a absolument aucun effet sur le processus parent.
Pour modifier le répertoire de travail d'utilisation
os.chdir("/your/path/here")
Il n'est pas possible de modifier le répertoire actuel à l'aide d'une sous-processus, car cela modifierait uniquement le répertoire actuel ne contenant le contexte de cette sous-processus et n'affecterait pas le processus actuel.
à la place, pour modifier le répertoire actuel dans le python Processus, utilisez la fonction de Python qui fait: d'autre part, si votre idée est que le script Python ne fait rien d'autre, mais il suffit de changer de répertoire et que la sortie (voici comment j'ai compris la question), cela ne fonctionnera pas non plus, car lorsque vous quittez le processus Python, le répertoire de travail actuel du processus parent ne sera à nouveau pas affecté. P> P> os.chdir < / code>
, par exemple: p>
Si vous voulez obtenir un dossier en arrière, faites-le simplement comme vous le faites dans la coquille.
directory = "/etc/bin/foo" if os.path.exists(directory) and os.path.isdir(directory): os.path.normpath(os.getcwd() + os.sep + os.pardir)
Utilisation de
Subprocess code> pour exécuter
CD code> va presque toujours être inutile; Cela ne modifie que le répertoire de travail pour le sous-processus préféré, laissant ainsi le courant fonctionnant directement inchangé une fois
sous-processus.Call code> retours. Ceci est également vrai si vous vous attendez à ce que le répertoire de travail ait changé après la sortie de votre processus Python.