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

我想在后台打开一个进程并与之交互,但是这个进程在Linux和Windows中都应该是不可见的。 在Windows中,你必须使用STARTUPINFO来做一些事情,而这在Linux中是无效的:

ValueError:startupinfo仅在Windows平台上受支持

有没有比每个操作系统创build一个单独的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) 

但这并不好。