具有隐藏窗口的跨平台子流程

end*_*ith 37 python linux windows subprocess cross-platform

我想在后台打开一个进程并与之交互,但这个进程在Linux和Windows中都应该是不可见的.在Windows中,您必须使用STARTUPINFO执行某些操作,而这在Linux中无效:

ValueError:仅在Windows平台上支持startupinfo

有没有比为每个操作系统创建单独的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)    
Run Code Online (Sandbox Code Playgroud)

Anu*_*yal 37

你可以减少一行:)

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

  • 如果设置`STARTF_SHOWWINDOW`,您还需要将`startupinfo`的`wShowWindow`成员初始化为一个`SW_*`常量.这个方法依赖于你运行的程序实际上对`wShowWindow`标志起作用; 它不是必须这样做的. (3认同)

goe*_*tor 12

请注意:对于Python 2.7,我必须使用subprocess._subprocess.STARTF_USESHOWWINDOW而不是subprocess.STARTF_USESHOWWINDOW.