【问题标题】:How to use subprocess to run a program without a window showing?如何在不显示窗口的情况下使用子进程运行程序?
【发布时间】:2021-05-10 19:32:06
【问题描述】:

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

【问题讨论】:

  • 我认为您正在运行的程序必须支持无头模式才能工作

标签: python subprocess


【解决方案1】:

在其他平台上似乎没有内置支持,但在 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 才能在创建应用程序窗口后隐藏它们。

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2015-06-15
    • 2011-06-12
    • 2010-12-20
    • 2022-06-13
    • 2012-04-15
    相关资源
    最近更新 更多