我想在后台打开一个进程并与之交互,但这个进程在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)    
有帮助吗?

解决方案

你可以减少一行:)

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)

但那并没有好多少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top