跨平台隐窗口子进程

38 投票
4 回答
20925 浏览
提问于 2025-04-15 12:21

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

我觉得你做的已经很简单了。你提到的优化其实只是减少大约5行代码而已。就这些钱,我建议你继续你的项目,接受这是跨平台开发的一个结果。如果你经常遇到这种情况,可以考虑创建一个专门的类或函数,把这个逻辑封装起来,然后导入使用。

12

只是提醒一下:对于Python 2.7,我需要用subprocess._subprocess.STARTF_USESHOWWINDOW,而不是subprocess.STARTF_USESHOWWINDOW

40

你可以少写一行代码哦 :)

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

撰写回答