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: Je reçois ce qui suit:
/ bin / sh: ../dir1/dir2/dir3/make: aucun fichier ou répertoire de ce type p> J'ai essayé: p> mais le faire la commande est ignoré. Je n'ai même pas le message "rien à construire pour". P> J'ai aussi essayé d'utiliser "communiquer" mais sans succès. Ceci est en cours d'exécution sur Red Hat Linux. P> P>
3 Réponses :
Essayez d'utiliser le chemin complet, vous pouvez obtenir l'emplacement du script Python en appelant pour obtenir le chemin: p> Vous trouverez de nombreuses manipulations de chemin dans le module OS.Path a > p> p>
Soyez prudent lorsque vous utilisez simplement os.path.dirname code>. 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])) code> vous obtiendra toujours le chemin complet.
Utilisez l'argument 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. p> p> CWD code> et utilisez le formulaire de liste de popen code>:
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 code> code> 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.
J'irais avec la solution de @ Philipp d'utiliser Modification du répertoire dir em> 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: CWD code>, mais comme une note latérale, vous pouvez également utiliser l'option -c code> pour faire: -c dir em>, --Directory = dir em> h3>
-c / -c, etc. code> équivaut à -c / etc code>. Ceci est généralement utilisé avec des invocations récursives de fabrication. P>
blockQuote> p>