Lorsqu'il s'agit de sous-processus, la modification du répertoire de travail pose un défi. Ce problème survient lorsque vous tentez de naviguer dans des sous-répertoires ou des super-répertoires. Cependant, la clé réside dans la compréhension de la distinction entre appeler un programme et exécuter une commande.
Dans votre code, vous essayez d'appeler un programme nommé "cd", ce qui est une approche non valide. Au lieu de cela, vous devriez appeler une commande nommée "cd".
Explication de l'erreur :
L'instruction "subprocess.call(['cd ..'])" déclenche une OSError car "cd" est un shell interne. Par conséquent, vous devez l'exécuter dans un shell, comme le montre la modification suivante :
subprocess.call('cd ..', shell=True)
Pourquoi "shell=True" est inutile :
Malgré son solution apparente, utiliser "shell=True" est en fait inutile. En effet, aucun processus ne peut modifier le répertoire de travail d'un autre processus, ce qui signifie que le sous-shell changera de répertoire et se fermera immédiatement.
Solutions alternatives :
Pour réussir à modifier le répertoire de travail avant d'exécuter un sous-processus, vous pouvez utiliser des méthodes alternatives :
Utilisation de "os.chdir()":
wd = os.getcwd() os.chdir("/destination/directory") subprocess.Popen("ls") os.chdir(wd)
Utilisation du paramètre "cwd" dans "subprocess":
subprocess.Popen("ls", cwd="/destination/directory")
Ces approches alternatives vous permettent de spécifier le répertoire de travail avant d'exécuter le sous-processus, en s'assurant que les commandes sont exécutées dans le répertoire souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!