我想在后台打开一个进程并与之交互,但是这个进程在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)
但这并不好。