8
votes

Invoquer la prise de différents répertoires avec le script Python

J'ai besoin d'appeler faire (construire un makefile) dans un répertoire différent de celui que je suis, à partir d'un script Python. Si je fais tout simplement: XXX

Je reçois ce qui suit: / bin / sh: ../dir1/dir2/dir3/make: aucun fichier ou répertoire de ce type

J'ai essayé: xxx

mais le faire la commande est ignoré. Je n'ai même pas le message "rien à construire pour".

J'ai aussi essayé d'utiliser "communiquer" mais sans succès. Ceci est en cours d'exécution sur Red Hat Linux.


0 commentaires

3 Réponses :


0
votes

Essayez d'utiliser le chemin complet, vous pouvez obtenir l'emplacement du script Python en appelant xxx

pour obtenir le chemin: xxx

Vous trouverez de nombreuses manipulations de chemin dans le module OS.Path


1 commentaires

Soyez prudent lorsque vous utilisez simplement os.path.dirname . Il renvoie une chaîne vide lorsqu'il est donné juste un nom de fichier. Calling OS.Path.Abspath (OS.Path.DirName (sys.argv [0])) vous obtiendra toujours le chemin complet.



8
votes

Utilisez l'argument CWD et utilisez le formulaire de liste de popen : xxx

invoquer la coque n'est presque jamais nécessaire et est susceptibles de causer des problèmes en raison de la complexité supplémentaire impliquée.


3 commentaires

Les Documents Python disent ce qui suit: Si CWD n'est pas nul, le répertoire actuel de l'enfant sera changé en CWD avant d'être exécuté. Notez que ce répertoire n'est pas pris en compte lors de la recherche sur l'exécutable, vous ne pouvez donc pas spécifier le chemin du programme par rapport à CWD. Donc, je ne suis pas sûr que cela fonctionnera.


Le programme doit être dans le chemin de recherche, bien sûr. Je suis à peu près sûr que cela fonctionne (sauf si je ne faisais pas de la typo stupide) parce que je l'utilise tout le temps.


Bien sûr, dans ce cas, c'est correct. J'ai un peu confus.



10
votes

J'irais avec la solution de @ Philipp d'utiliser CWD , mais comme une note latérale, vous pouvez également utiliser l'option -c pour faire: xxx < / Pré>

-c dir , --Directory = dir

Modification du répertoire dir Avant de lire les maquillages ou de faire autre chose. Si plusieurs options -C sont spécifiées, chacune est interprétée par rapport à la précédente: -c / -c, etc. équivaut à -c / etc . Ceci est généralement utilisé avec des invocations récursives de fabrication.


0 commentaires