在没有控制台的情况下使用Popen在pythonw中运行进程

我有一个带有GUI的程序,该程序可通过Popen调用运行外部程序:


p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd())

p.communicate()

但是无论我做什么,都会弹出一个控制台(我也尝试过将NUL传递给文件句柄)。有什么方法可以做到而无需获取我调用的二进制文件来释放其控制台?


GCT1015
浏览 748回答 3
3回答

月关宝盒

从这里:import subprocessdef launchWithoutConsole(command, args):&nbsp; &nbsp; """Launches 'command' windowless and waits until finished"""&nbsp; &nbsp; startupinfo = subprocess.STARTUPINFO()&nbsp; &nbsp; startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW&nbsp; &nbsp; return subprocess.Popen([command] + args, startupinfo=startupinfo).wait()if __name__ == "__main__":&nbsp; &nbsp; # test with "pythonw.exe"&nbsp; &nbsp; launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])请注意,有时抑制控制台会使子流程调用失败,并显示“错误6:无效的句柄”。一种快速修复是重定向stdin,如此处所述:以Windows服务运行的Python:OSError:[WinError 6]句柄无效

侃侃无极

根据Python 2.7文档和Python 3.7文档,您可以Popen通过设置影响创建过程的方式creationflags。该CREATE_NO_WINDOW标志尤其对您有用。variable = subprocess.Popen(&nbsp; &nbsp;"CMD COMMAND",&nbsp;&nbsp; &nbsp;stdout = subprocess.PIPE, creationflags = subprocess.CREATE_NO_WINDOW)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python