如何使用子流程在不显示窗口的情况下运行程序



我正在使用subprocess.call()在我的PC(确切地说是用于外汇交易的Meta Trader平台(上以编程方式启动软件。呼叫工作正常,终端启动正常,但我现在想通过删除弹出的Meta Trader窗口来改善体验。我知道在网络抓取中,可以使用无头浏览器,这样就可以在屏幕上不显示实际的(可见的(网络浏览器窗口的情况下进行抓取。我想知道是否有某种方法可以使用subprocess.call()(或其他(实现相同的功能。

在其他平台上似乎没有内置的支持,但在Windows上可以通过将STARTUPINFO实例传递给Popen构造函数来实现。

以下示例在后台启动记事本编辑器。它的窗口是隐藏的,但程序正在按照任务管理器显示的方式运行。按下Ctrl+C可停止程序并终止后台进程。

import subprocess
from time import sleep
process = subprocess.Popen(
'notepad',
startupinfo=subprocess.STARTUPINFO(
dwFlags=subprocess.STARTF_USESHOWWINDOW,
wShowWindow=subprocess.SW_HIDE,
),
)
try:
while process.poll() is None:
sleep(1)
except KeyboardInterrupt:
process.kill()

请注意,这可能不适用于启动自己的子流程的更复杂的应用程序,例如Chrome浏览器。然后可能必须通过Windows API才能在创建应用程序窗口后隐藏这些窗口。

相关内容

最新更新