Кроссплатформенный подпроцесс со скрытым окном

Я хочу открыть процесс в фоновом режиме и взаимодействовать с ним, но этот процесс должен быть невидимым как в Linux, так и в Windows. В Windows вам нужно что-то сделать со STARTUPINFO, хотя в Linux это недопустимо:

ValueError: startupinfo is only supported on Windows platforms

Есть ли более простой способ, чем создание отдельной команды Popen для каждой ОС?

<code>if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    proc = subprocess.Popen(command, startupinfo=startupinfo)
if os.name == 'posix':
    proc = subprocess.Popen(command)    
</code>

Ответы на вопрос(4)

params = dict()

if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    params['startupinfo'] = startupinfo

proc = subprocess.Popen(command, **params)

но это не намного лучше.

 19 июн. 2009 г., 08:54
нет необходимости создавать params, так как во всех системах Popen принимает param startupinfo, но в posix оно должно быть None

Python 2.7 Я должен использоватьsubprocess._subprocess.STARTF_USESHOWWINDOW вместоsubprocess.STARTF_USESHOWWINDOW.

 07 июл. 2014 г., 15:24
Какая версия Python 2.7 была? В соответствии сcode.google.com/p/googleappengine/issues/detail?id=10363#c2 subprocess.STARTF_USESHOWWINDOW is added after Python 2.7.2.
 24 февр. 2011 г., 03:54
Спасибо, это был именно тот совет, который мне был нужен.
 07 июл. 2014 г., 15:19
Связанная проблема Python 9861:subprocess module changed exposed attributes
Решение Вопроса

startupinfo = None
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
 20 июн. 2009 г., 16:57
я просто просмотрел код подпроцесса, чтобы увидеть, как они генерируют эту ошибку, и они проверяют, не является ли startupinfo None, как это должно быть в python
 endolith20 июн. 2009 г., 15:44
Ага. Я пробовал startupinfo = & apos; & apos; и это не сработало. Это ответ, который я искал.
 01 сент. 2009 г., 03:03
Если вы установитеSTARTF_SHOWWINDOW, вы также хотите инициализироватьwShowWindow членstartupinfo к одному изSW_* константы. Этот метод основан на программе, которую вы запускаете, действуя наwShowWindow флаг; это не требуется для этого.

что вы можете сделать это намного проще, чем то, что вы сделали. Вы говорите об оптимизации, возможно, 5 строк кода. За эти деньги я бы просто продолжил свой проект и принял это как следствие кроссплатформенной разработки. Если вы делаете это много, то создайте специализированный класс или функцию для инкапсуляции логики и импортируйте ее.

Ваш ответ на вопрос