python.exe在任务调度程序中运行批处理文件后保持打开状态



我正在尝试在任务调度程序中安排:

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

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

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

call activate python2
start C:UsersChrisAnaconda3envspython2python.exe testtest.py
sleep 30
exit

我的python脚本:

driver = webdriver.Chrome(executable_path="C:pathtochromedriver")
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('myemail@email.com')
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()

最后一件事,程序/脚本是批处理文件,没有参数,启动IS在目录中,批处理文件在。

任何帮助将不胜感激!

将您的python代码放在 main()函数中。

和:

if __name__ == '__main__':
    main()

最后。刚刚测试为我工作。

@pk2019的答案确实对我有帮助。

一种改进是使用

drv = webdriver.Chrome()
# Do your things.
...

drv.close()
drv.quit()

无需完成杀死任务的肮脏工作。

我不是python专家,但我认为您只需要致电sys.exit()或quit()。

而不是使用睡眠和等待时间太长或可能不够长,而是从等待选项开始:

call activate python2
start /WAIT C:UsersChrisAnaconda3envspython2python.exe testtest.py
exit

如果您不需要批处理文件来执行其他操作,则可以启动Python脚本并退出。

我在Windows上运行geckodriver.exe Firefox Web驱动程序的Python Selenium Web Scraper也有类似的问题(使用.bat文件通过任务调度程序执行)。问题是我的geckodriver.exe进程仍在完成Python脚本后仍在运行...而且我认为运行过程阻止Windows命令提示符关闭。

为了测试此Hunch,我将tasklist命令插入了Python脚本之前和之后的.bat文件中。它将运行Windows任务的列表打印到控制台...我注意到geckodriver.exe文件仍在运行Python脚本。

在这两个不同的堆叠式响应中描述了杀死Windows过程的方法(使用taskkill):

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

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

就我而言,我将其添加为第二行:taskkill /im geckodriver.exe /f,最后一行为exit。奏效了。

最新更新