如何从 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 loop
和sleep
。
[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 中切换到新窗口?
如何使用asp.net MVC中的href从javascript在新窗口中打开打开的窗口