如何从 python 脚本在新窗口上打开批处理

Posted

技术标签:

【中文标题】如何从 python 脚本在新窗口上打开批处理【英文标题】:How to open a batch on a new window from a python script 【发布时间】:2021-08-15 01:35:29 【问题描述】:

我正在尝试为将循环运行的特定进程创建监控脚本,但我不知道如何让应用在新窗口上批量运行而不影响监控脚本。

这是我目前所拥有的,但它在同一个 cmd 窗口上运行。另外,我怎样才能使它看起来简单,以便它可以每半小时检查一次进程是否正在运行,如果不是,则执行应用程序批处理文件。

这是我目前所拥有的,但我在网上找到的一切都超出了我的想象......

    import subprocess

def process_exists(process_name):
    call = 'TASKLIST', '/FI', 'imagename eq %s' % process_name
    # use buildin check_output right away
    output = subprocess.check_output(call).decode()
    # check in last line for process name
    last_line = output.strip().split('\r\n')[-1]
    # because Fail message could be translated
    return last_line.lower().startswith(process_name.lower())

print (process_exists('process.exe'))

if not process_exists('process.exe'):
    subprocess.call([r'app.bat'])

【问题讨论】:

【参考方案1】:

有几种方法可以使用:

[1] 线程

import threading
def main_runner():
    # some code
    return

every_n_mins = 1
threading.Timer( 60*every_n_mins, main_runner, [loop_number, every_n_mins] ).start()

[2] for循环: 只需在代码中添加for loopsleep

[3] 任务计划程序: 在操作系统中使用task scheduler 以在指定时间段继续运行代码。在 windows 中它被称为 dtask 调度程序。

每种方法都有其优点并可供讨论。

【讨论】:

【参考方案2】:

刚刚发现了一些有用的东西,至少对于新窗口问题。刚刚删除了括号并将以下内容添加到 subprocess.call:

subprocess.call('app.bat', creationflags=subprocess.CREATE_NEW_CONSOLE)

【讨论】:

【参考方案3】:

至于循环,只是想在这里为像我这样的超级初学者提一下:

这是最终的脚本:

import subprocess
import time
from datetime import datetime

def process_exists(process_name):
    call = 'TASKLIST', '/FI', 'imagename eq %s' % process_name
    # use buildin check_output right away
    output = subprocess.check_output(call).decode()
    # check in last line for process name
    last_line = output.strip().split('\r\n')[-1]
    # because Fail message could be translated
    return last_line.lower().startswith(process_name.lower())

print (process_exists('ethminer.exe'))

x=1
while x == 1:
    if not process_exists('ethminer.exe'):
         #subprocess.call(r'', creationflags=subprocess.CREATE_NEW_CONSOLE)
         subprocess.call(r'C:\Users\User\Downloads\ethminer-0.19.0-alpha.0-cuda10.0-windows-amd64\bin\main.bat', creationflags=subprocess.CREATE_NEW_CONSOLE)
         print(datetime.now())
         time.sleep(300)

【讨论】:

如果你这样做x==1,那么不会有任何条件可以停止循环。 (你可能想要也可能不想要这个功能)。

以上是关于如何从 python 脚本在新窗口上打开批处理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Selenium for Python 中切换到新窗口?

如何让DOS命令在新窗口打开

如何使用asp.net MVC中的href从javascript在新窗口中打开打开的窗口

Selenium2+python自动化13-多窗口句柄(handle)

如何使用机器人框架硒打开新窗口?

C# WebBrowser 控件拦截从 PHP 脚本在新窗口中下载