38

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

4 回答 4

38

你可以减少一行:)

startupinfo = None
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
于 2009-06-19T06:48:07.477 回答
12

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

于 2010-08-09T18:49:16.710 回答
4

我不确定你能比你所做的简单得多。您正在谈论优化可能 5 行代码。为了钱,我会继续我的项目,并接受这是跨平台开发的结果。如果你经常这样做,那么创建一个专门的类或函数来封装逻辑并导入它。

于 2009-06-19T05:00:22.640 回答
1

你可以把你的代码变成:

params = dict()

if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    params['startupinfo'] = startupinfo

proc = subprocess.Popen(command, **params)

但这也好不到哪里去。

于 2009-06-19T06:38:02.813 回答