Dans le cadre de mon programme basé sur python, je dois appeler un programme Java - résolu parfaitement avec os.system(). Cela a bien fonctionné, jusqu'à ce que je déplace tout le contenu d'un répertoire à l'autre. J'ai changé tous les chemins de fichier dans le code python, et le programme java - pour autant que je sache, je ne comprends pas vraiment java - repose sur des chemins de fichiers relatifs, qui n'ont pas été modifiés pendant le déplacement. Mais maintenant, le programme Java ne s'ouvrira pas. La ligne de commande apparaît alors disparaît presque instantanément, donc je sais que os.system() fonctionne. Cela doit être en rapport avec le chemin de fichier que j'utilise dans os.system, car quand je change cela en chemin d'accès d'origine, cela fonctionne parfaitement. Code ci-dessous:Étrange erreur appelant le programme java à partir de python via la ligne de commande
os.system("java -jar C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
Où fileNames est une variable passée thingie au programme java comme argument, que je suis assez sûr est pas le problème. Si j'appelle le programme python directement à partir de cmd.exe, il me renvoie le message d'erreur "Impossible d'accéder à Jarfile C: \ Documents". Je pensais que cela pourrait avoir à faire avec les espaces dans le filepath, donc je mis underscores dans:
os.system("java -jar C:\\Documents_and_Settings\\enginx_mgr.ISIS\\My_Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames)
Et il m'a donné le même message « Impossible d'accéder JarFile », mais cette fois avec le plein filepath. Essayer os.path.exists()
sur le chemin de fichier renvoie true, donc python connaît son chemin de fichier réel; Je suppose que ça doit être la ligne de commande en désaccord avec ça, mais je ne sais pas pourquoi. Des idées?
Edit: filepath originale, si son d'intérêt, était C:\Inetpub\ftproot\JPivSource\jpivc.jar
Edit 2: Son presque certainement pas CheminFichier, en passant par les réponses ci-dessous et le fait qu'aucun d'entre eux travaillent (et que les œuvres de filePath originales). J'ai vérifié les options de sécurité à partir d'une intuition, et j'ai un contrôle total sur le fichier .jar, tout comme le système, donc ce n'est pas qu'il ne peut pas y accéder pour des raisons de sécurité. Toujours au carré zéro.
Vous ne devez pas utiliser les barres obliques inverses dans les chemins. Les barres obliques directes fonctionnent sur tous les systèmes alors que les barres obliques inverses ne fonctionnent que sur les fenêtres. En plus de cela, 'subprocess' a de jolies fonctions qui prennent la commande et les arguments à travers un tableau, donc vous n'avez pas besoin de prendre des cotes etc. – ThiefMaster
Je doute fortement que vos deux chemins soient identiques. Voici une question similaire: http://stackoverflow.com/questions/204017/how-do-i-execute-a-program-from-python-os-system-fails-due-to-spaces-in-path – Jacob
Voulez-vous dire que vous avez renommé "Documents and Settings" sur votre système? Ou avez-vous simplement mis _ à la place de l'espace dans l'appel? Je suggère d'essayer de mettre le nom du jar dans les guillemets échappés: "java -jar \" chemin vers jar \ "% s". – Nodebody