Почему файл jar немедленно завершается после вызова с помощью скрипта Python?

#java #python

Вопрос:

В настоящее время я программирую скрипт на Python, который открывает файл в другом каталоге, который пользователь вводит в поле ввода. Все работает нормально, но файл jar, который я использовал для тестирования, не запускается и не отображается. Я использую Shimeji-ee.jar во время тестирования, и в какой-то момент его значок в трее появился, но сразу же исчез.

Я попытался запустить его в командной строке(поскольку вызов файла jar с помощью сценария аналогичен запуску файла в CMD) и обнаружил, что он запускается только до тех пор, пока открыто окно CMD. Несколько поисков спустя я нашел способ запускать файлы в CMD, который поддерживает его работу даже после закрытия CMD. Я написал это в своем сценарии, без ошибок, но Shimeji и его значок в трее больше никогда не появляются.

Я добавил строку в конце своего сценария, которая также считается эффективным способом поддержания работы сценария, но она также не работает(здесь может быть еще одна ошибка).:

 while True:
    keyboard.wait('q')
    if keyboard.is_pressed:
        sys.exit()
 

Вот строка кода в моем скрипте, которая выполняет вызов:

 subprocess.run(['D:', 'cd', PurePath(fileDirectory), 'START', '""', fileToExecute], cwd=os.getcwd(), shell=True)
 

Код, который я выучил, заставляет файл работать в фоновом режиме(аналогично добавлению amp; в терминале Linux):

 START "" program
 

У меня были мысли, что проблема может быть в файле jar, который я использую, но я уже несколько часов не находил ответов. Есть ли что-то не так с кодом или я что-то упускаю?

Обновление: Код, наконец, сработал после первого ответа, но я получил сообщение об ошибке, которое, казалось, считывало файл как двойную косую черту, как это:

 # The network path was not found //
 

или

 # The system could not find the file //
 

Решение, которое я нашел, состояло в том, чтобы просто удалить '""' часть кода, которая делает код похожим на это:

 subprocess.run(['START', fileToExecute], cwd=PurePath(fileDirectory), shell=True)
 

Ответ №1:

Проблема в том, что ваш код:

 subprocess.run(['D:', 'cd', PurePath(fileDirectory), 'START', '""', fileToExecute], cwd=os.getcwd(), shell=True)
 

выполняет команду D: с аргументами cd somedirectory START "" fileToExecute , которая изменяет текущий диск оболочки на D диск, а затем завершает работу.

Вы, вероятно, хотите выполнить

 subprocess.run(['START', '""', fileToExecute], cwd=PurePath(fileDirectory), shell=True)