подпроцесс.Popen в другой консоли

Я надеюсь, что это не дубликат.

Я пытаюсь использовать subprocess.Popen() открыть скрипт в отдельной консоли. Я попытался установить shell=True параметр, но это не помогло.

Я использую 32-битный Python 2.7 на 64-битной Windows 7.

4 ответов


from subprocess import *

c = 'dir' #Windows

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()

если вы не используете shell=True вы должны поставить Popen() со списком вместо командной строки, например:

c = ['ls', '-l'] #Linux

а затем откройте его без оболочки.

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE)
print handle.stdout.read()
handle.flush()

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

from subproccess import check_output
print check_output('dir')

чтобы открыть новое окно GUI консоли и выполнить X:

import os
os.system("start cmd /K dir") #/K remains the window, /C executes and dies (popup)

чтобы открыть в другой консоли, выполните (протестировано на Win7 / Python 3):

from subprocess import Popen, CREATE_NEW_CONSOLE

Popen('cmd', creationflags=CREATE_NEW_CONSOLE)

input('Enter to exit from Python script...')

по теме

как я могу создавать новые оболочки для запуска скриптов python из базового скрипта python?


Я попробовал creationflags=CREATE_NEW_CONSOLE на Win7 / python 2.7, и это также сработало.


в Linux shell=True сделает трюк:

command = 'python someFile.py' subprocess.Popen('xterm -hold -e "%s"' % command)

не работает с gnome-terminal, как описано здесь:

https://bbs.archlinux.org/viewtopic.php?id=180103