-3
votes

Comment "CD" entre des répertoires à l'aide d'un script Python

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 xxx

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 /" . J'ai besoin de parcourir un répertoire à partir du répertoire actuel, alors je peux saisir / etc et lire des fichiers là-bas. Tout conseil?


1 commentaires

Utilisation de Subprocess pour exécuter CD 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 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.


4 Réponses :


1
votes

Vous devez utiliser os.chdir (répertoire) , puis appeler pour ouvrir votre processus. J'imagine que ce serait plus simple et lisible


1 commentaires

C'est plus que simplement "simple" et "lisible": c'est la seule façon possible que fonctionne réellement . Faire un CD dans un sous-processus n'a absolument aucun effet sur le processus parent.



2
votes

Pour modifier le répertoire de travail d'utilisation

os.chdir("/your/path/here")


0 commentaires

0
votes

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: os.chdir < / code> , par exemple: xxx


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é.


0 commentaires

0
votes

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)


0 commentaires