2011-07-06 5 views
2

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.

+3

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

+2

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

+0

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

Répondre

0

Votre problème semble provenir d'une faute de frappe quelque part. Cela devrait corriger:

  • Ouvrez l'Explorateur Windows
  • faites un clic droit sur le fichier
  • cliquez sur « Propriétés »
  • copie l'emplacement
  • coller cet emplacement dans votre script, avec des répertoires échappés.
+0

Ce n'est certainement pas une faute de frappe. Je commence à penser que ce n'est pas le chemin du fichier qui cause l'erreur, mais je ne sais pas ce que c'est. –

1

Pas une réponse directe, mais ...

je pense qu'il est préférable d'appeler le fichier .bat au lieu d'appel direct à Java avec de nombreuses options de ligne de commande. De cette façon, vous n'aurez pas besoin de changer le programme Python pour ajouter d'autres options (comme -Xms2048m ou -Dfile.encoding=utf8).

Un tel fichier .bat est également beaucoup plus facile à déboguer.

0

Vous devez placer des guillemets autour de votre chemin.

os.system('java -jar "C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar" %s' % fileNames)

0

Je suis désolé pour offrir une autre solution de chemin de fichier, mais cela n'a pas été mentionné, et il semble probable que le changement de voies serait l'origine du problème. Donc, si cela ne vous dérangerait pas de m'embrasser?Tout ce que j'ai fait différemment, c'est d'échapper les espaces avec un antislash.

Vous avez dit que os.path.exists renvoie True, et c'est bien, mais vous essayez d'exécuter un programme de ligne de commande en lui passant un certain nombre d'arguments. Le programme qui lit les arguments interprétera la chaîne comme plusieurs chaînes à cause des espaces.

Vous pouvez également essayer de modifier les citations que vous utilisez:

os.system('java -jar "C:\\Documents and Settings\\enginx_mgr.ISIS\\My Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar" %s' % fileNames) 

Ce chemin de fichier que vous utilisez ne air tout à fait étrange.

Questions connexes