#python #python_3x #python_35
Мне нужно, чтобы я смог запустить новое окно CMD(terminal или xterm), где смог бы запуститься другой python модуль, причем, чтобы главная программа продолжила работу. Решение нужно универсальное для Windows и Linux. (скрипт для выполнения второй CMD лежит в той же директории. Parent.py - основная программа, Child.py - вторая программа).
Ответы
Ответ 1
причем что бы главная программа продолжила работу. Чтобы запустить внешнюю команду, не дожидаясь её окончания: import subprocess command = ['программа', 'первый аргумент', 'второй'] p = subprocess.Popen(command) # ... основная программа обратите внимание функции в subprocess модуле (в отличии от os.system()) не запускают shell, если вы явно не попросите, поэтому к примеру, для внутренних команд CMD таких как START необходимо явно CMD запускать. Этот вызов работает как на *nix так и на Windows. Существует несколько градаций (спектр) "независимости" процесса (вплоть до демона/системного сервиса). См. Запустить независимый скрипт Python из другого скрипта. Если вы хотите графическое окно открыть и в нём запустить команду: import platform import subprocess # define a command that starts new terminal if platform.system() == "Windows": new_window_command = "cmd.exe /c start".split() else: new_window_command = "x-terminal-emulator -e".split() subprocess.check_call(new_window_command + command) How can I open two consoles from a single script keep multiple console windows open from batch Если вы хотите Питон-код в отдельном процессе выполнить, то можно использовать sys.executable, чтобы тот же исполняемый файл, что и текущий Питон-интерпретатор, запустить. Чтобы найти путь к файлу относительно текущего скрипта, есть функции (такие как get_script_dir()), которые могут помочь: import os import sys command = [sys.executable, os.path.join(get_script_dir(), 'do_something.py'), 'other', 'args'] Если модуль, который вы хотите запустить, находится в sys.path, то можно -m ключ использовать: command = [sys.executable, '-m', 'do_something', 'other', 'args'] Вместо запуска как независимого скрипта, вы можете импортировать соответствующий модуль и вызвать функции из него, используя multiprocessing модуль: #!/usr/bin/env python import multiprocessing as mp import do_something if __name__ == '__main__': mp.Process(target=do_something.main, args=['other', 'args']).start() # ... основная программа См. Calling a python script with input within a python script using subprocess.Ответ 2
Можете попробовать стандартным методом. import os os.system('x-terminal-emulator -e python test.py') subprocess.Popen лучше, но не на всех системах работает почему-то
Комментариев нет:
Отправить комментарий