跨平台与子隐藏的窗口跨平台与子隐藏的窗口(Cross-platform subprocess wit

2019-05-13 13:01发布

我想在后台打开一个程序,用它交流,但这个过程应该在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)    

Answer 1:

您可以减少一个行:)

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


Answer 2:

刚一说明:为Python 2.7我必须使用subprocess._subprocess.STARTF_USESHOWWINDOW而不是subprocess.STARTF_USESHOWWINDOW



Answer 3:

我不知道,你可以得到比你做了什么要简单得多。 你说的是优化了也许5行代码。 为了钱,我只想得到我的项目,并接受这种跨平台开发的consquence。 如果你做了很多,然后创建一个专门的类或函数来封装逻辑和导入。



Answer 4:

你可以把你的代码:

params = dict()

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

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

但是这也不遑多让。



文章来源: Cross-platform subprocess with hidden window