Python запустить системную команду и затем выйти ... не выйдет - PullRequest
10 голосов
/ 24 июля 2011

У меня есть следующий код Python:

os.system("C:/Python27/python.exe C:/GUI/TestGUI.py")
sys.exit(0)

Он отлично запускает команду, и появляется окно.Тем не менее, он не выходит из первого скрипта.Он просто остается там, и мне в конечном итоге приходится принудительно убивать процесс.Ошибки не выдаются.Что происходит?

Ответы [ 4 ]

16 голосов
/ 24 июля 2011

вместо os.system используйте subprocess.Popen

, команда запускается, не ждет ее и затем завершается:

import subprocess
import sys

subprocess.Popen(["mupdf", "/home/dan/Desktop/Sieve-JFP.pdf"])
sys.exit(0)

обратите внимание, что os.system(command) похоже:

p = subprocess.Popen(command)
p.wait()
0 голосов
/ 21 июля 2015

KeyboardInterrupts и сигналы видны только процессу (то есть основной поток).Если ваша вложенная команда зависает из-за какого-либо блока чтения или записи файла, вы не сможете выйти из программы, используя любые клавиатурные команды.

Почему открывается именованный блок канала только для чтения?

Если вы не можете удалить источник дискового блока, то один из способов - это переноспроцесс в потоке, чтобы вы могли принудительно убить его.Но если вы сделаете это, вы оставите возможность для наполовину записанных и поврежденных файлов на диске.

0 голосов
/ 02 апреля 2013

Я предлагаю использовать os._exit вместо sys.exit, поскольку sys.exit не выходит из программы, но повышает уровень исключения или выходит из потока. os._exit(-1) завершает работу всей программы

0 голосов
/ 24 июля 2011
import sys ,subprocess

subprocess.Popen(["C:/Python27/python.exe", "C:/GUI/TestGUI.py"])
sys.exit(0)

Получите из модуля подпроцесса то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...