Подтвердить что ты не робот

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

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

ValueError: startupinfo поддерживается только на платформах Windows

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

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)    
4b9b3361

Ответ 1

Вы можете уменьшить одну строку:)

startupinfo = None
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)

Ответ 2

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

Ответ 3

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

Ответ 4

Вы можете превратить свой код в:

params = dict()

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

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

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