我想在后台打开一个进程并与之交互,但这个进程在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)
答案 0 :(得分:35)
你可以减少一行:)
startupinfo = None
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
答案 1 :(得分:12)
请注意:对于 Python 2.7 ,我必须使用subprocess._subprocess.STARTF_USESHOWWINDOW
代替subprocess.STARTF_USESHOWWINDOW
。
答案 2 :(得分:4)
我不确定你能比你所做的更简单。你在谈论优化5行代码。为了钱,我将继续我的项目,并接受这作为跨平台开发的一个序列。如果你做了很多,那么创建一个专门的类或函数来封装逻辑并导入它。
答案 3 :(得分:1)
您可以将代码转换为:
params = dict()
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
params['startupinfo'] = startupinfo
proc = subprocess.Popen(command, **params)
但那并没有好多少。