Странная ошибка вызова java-программы из python через командную строку

Как часть моей программы на основе python, я должен вызвать программу на Java – она ​​была полностью решена с помощью os.system (). Он работал хорошо, пока я не переместил всю вещь из одного каталога в другой. Я изменил все пути к файлу в коде python, и java-программа – насколько я могу судить, я действительно не понимаю java – полагается на относительные пути к файлам, которые не были изменены во время перемещения. Но теперь программа Java не откроется. Появляется командная строка, которая исчезает почти мгновенно, поэтому я знаю, что os.system () работает. Это должно быть связано с файловой переменной, которую я использую в os.system, так как, когда я меняю это на исходный путь к файлу, он отлично работает. Код ниже:

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

Где fileNames – переменная thingie, переданная в java-программу как аргумент, который, я уверен, не является проблемой. Если я вызываю программу python непосредственно из cmd.exe, он возвращает мне сообщение об ошибке «Невозможно получить доступ к Jarfile C: \ Documents». Я думал, что это может быть связано с пробелами в пути к файлу, поэтому я помещаю символы подчеркивания в:

 os.system("java -jar C:\\Documents_and_Settings\\enginx_mgr.ISIS\\My_Documents\\ISAProgramFiles\\JPivSource\\jpivc.jar %s"%fileNames) 

И он дал мне то же сообщение «Не удалось получить доступ к Jarfile», но на этот раз с полным файловым путем. Попытка os.path.exists() на пути к файлу возвращает true, поэтому python знает его реальный os.path.exists() ; Думаю, это не значит, что командная строка не согласна с этим, но я не знаю, почему. Есть идеи?

Edit: Исходный C:\Inetpub\ftproot\JPivSource\jpivc.jar , если он представляет интерес, был C:\Inetpub\ftproot\JPivSource\jpivc.jar

Изменить 2: это почти наверняка не путь к файлу, и ответы на них ниже, и тот факт, что никто из них не работает (и что работает исходный файл). Проверяли параметры безопасности из-за догадок, и я полностью контролирую файл .jar, равно как и систему, поэтому он не может получить к ней доступ по соображениям безопасности. Все еще в квадрате нуля.

Не прямой ответ, но …

Я думаю, что лучше называть .bat файл вместо прямого вызова java со многими параметрами командной строки. Таким образом, вам не нужно будет менять программу Python, чтобы добавить некоторые другие параметры (например, -Xms2048m или -Dfile.encoding=utf8 ).

Такой .bat файл также намного легче отлаживать.

Ваша проблема выглядит вызванной из-за опечатки где-то. Это должно исправить:

  • Открыть проводник Windows
  • щелкните правой кнопкой мыши по файлу
  • нажмите «Свойства»
  • скопировать местоположение
  • вставьте это местоположение в свой скрипт, а каталоги экранированы.

Вы должны поставить кавычки вокруг своего пути.

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

Я сожалею о том, что предлагаю другое решение для путей к файлу, но об этом не упоминалось, и кажется вероятным, что изменение путей вызовет проблему. Итак, если вы не возражаете, чтобы меня ухаживали?

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

Все, что я сделал по-другому, – это избежать пробелов с обратной косой чертой.

Вы сказали, что os.path.exists возвращает True , и все в порядке, но вы пытаетесь выполнить программу командной строки, передав ей несколько аргументов. Программа, читающая аргументы, будет интерпретировать строку как несколько строк из-за пробелов.

Вы также можете попробовать изменить кавычки, которые вы используете:

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

Этот путь к файлу, который вы используете , выглядит довольно странно.