在任务计划程序中运行批处理文件后,Python.exe 保持打开状态

问题描述 投票:0回答:4

我正在尝试在任务计划程序中进行安排:

  1. 运行批处理文件
  2. 激活 conda 环境
  3. 运行Python程序
  4. 退出命令提示符

一切正常,除了在命令提示符关闭时 python.exe 窗口将保持打开状态。

我的批处理文件:(睡眠是为了让python代码运行。需要几秒钟)

call activate python2
start C:\path\to\Anaconda3\envs\python2\python.exe testtest.py
sleep 30
exit

我的Python脚本:

driver = webdriver.Chrome(executable_path="C:\path\to\chromedriver")
driver.get('http://website.com')

# Find email and pw fields and then fill them in
email = driver.find_element_by_id("user_email")
email.send_keys('[email protected]')
pw = driver.find_element_by_id("user_password")
pw.send_keys('password')

# Click on sign-in button
driver.find_element_by_class_name("button").click()
time.sleep(5)

# Click on save button to update
driver.find_element_by_class_name("button").click()

# Close driver
driver.close()

最后一件事,程序/脚本是批处理文件,没有参数,并且开始于批处理文件所在的目录。

如有任何帮助,我们将不胜感激!

windows python-2.7 batch-file scheduled-tasks
4个回答
3
投票

将Python代码放入

main()
函数中。

并给出:

if __name__ == '__main__':
    main()

最后。 刚刚测试对我有用。


3
投票

@pk2019 的回答对我很有帮助。

一项改进是使用

drv = webdriver.Chrome()

# Do your things.
...


drv.close()
drv.quit()

无需做杀任务的脏活。


0
投票

我不是Python专家,但我认为你只需要调用sys.exit()或quit()

不要使用 sleep 并等待太长时间或可能不够长,而是使用 wait 选项调用 start:

call activate python2
start /WAIT C:\Users\Chris\Anaconda3\envs\python2\python.exe testtest.py
exit

如果您不需要批处理文件执行任何其他操作,则只需启动 python 脚本并退出即可。


0
投票

我在 Windows 上运行

geckodriver.exe
Firefox Web 驱动程序的 Python selenium Web scraper 也遇到了类似的问题(使用 .bat 文件通过任务计划程序执行)。问题是我的
geckodriver.exe
进程在 Python 脚本完成后仍在运行......并且我认为正在运行的进程正在阻止 Windows 命令提示符关闭。

为了测试这种预感,我将

tasklist
命令插入到 .bat 文件中,位于 Python 脚本之前和之后。它将正在运行的 Windows 任务列表打印到控制台...我注意到
geckodriver.exe
文件仍在运行,Python 脚本已完成。

杀死 Windows 进程的方法(使用

taskkill
)在这两个不同的 Stackoverflow 响应中进行了描述:

  1. 在 Windows 上安全杀死 Python 脚本
  2. 用于关闭所有打开的命令提示符窗口的批处理脚本
  3. 如何在Python中执行批处理文件后关闭命令提示符窗口?

这里是

taskkill
的 Windows 文档: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/taskkill

就我而言,我将其添加为倒数第二行:

taskkill /im geckodriver.exe /f
,最后一行是
exit
。那行得通。

© www.soinside.com 2019 - 2024. All rights reserved.