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

Я хочу открыть процесс в фоновом режиме и взаимодействовать с ним, но этот процесс должен быть невидим в 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) 

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

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

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

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

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

 params = dict() if os.name == 'nt': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW params['startupinfo'] = startupinfo proc = subprocess.Popen(command, **params) 

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