Странная ошибка вызова 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, равно как и систему, поэтому он не может получить к ней доступ по соображениям безопасности. Все еще в квадрате нуля.
- Как флаг -m отличается между Python 2 и 3?
- Перенаправить вывод интерактивных команд python / ipython в файлы или переменные
- Как я могу отлаживать POST-запросы с помощью BaseHTTPServer / SimpleHTTPServer python?
- Обтекание приложения интерактивной командной строки в скрипте python
- Нужен лучший способ выполнения команд консоли из python и регистрации результатов
Не прямой ответ, но …
Я думаю, что лучше называть .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)
Этот путь к файлу, который вы используете , выглядит довольно странно.
- Ошибка после создания exe с Py2exe
- Тестирование черри с носом / прибором / веб-тестом (амидоинитрит)
- Как проверить, завершена ли печать PDF в командной строке linux
- Отправка электронной почты в Python из исполняемого файла
- Можно ли включить параметры командной строки в python shebang?
- Выход Piping в Python: несколько каналов для передачи данных и сообщений?
- Пауза в Python
- Как я могу получить python в командной строке в Windows?
- Как сделать перенаправление вывода оболочки (>), когда скрипт все еще запущен?
- Запустите функцию python, которая явно принимает аргументы из powershell (без передачи аргументов отдельно)
- Вопрос Django manage.py