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

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

4 Solutions collect form web for “Кросс-платформенный подпроцесс со скрытым окном”

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

 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) 

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

  • Запуск веб-сервера Python в качестве службы в Windows
  • PIPON PIP имеет проблемы с путём для MS Visual Studio 2010 Express для 64-разрядной установки на Windows 7
  • Определите фактическое использование памяти Python
  • Зачем мне нужно __declspec (dllexport), чтобы сделать некоторые функции доступными из ctypes?
  • PySerial не разговаривает с Arduino
  • Скриншот активного окна с Python PIL и API окон: как бороться с закругленными углами?
  • Как получить доступ к серверу разработки бутылок с другого ПК в локальной сети?
  • Сельдерей «Приступая к работе» не может получить результаты; всегда ожидающий
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.