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

5

我正在尝试在任务计划程序中安排以下操作:

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

所有步骤都可以正常工作,除了Python.exe窗口会一直保持打开状态,而命令提示符则关闭了。

我的批处理文件如下:(睡眠时间是为了等待Python代码运行完成。这需要几秒钟的时间)

call activate python2
start C:\Users\Chris\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('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()

最后一件事,程序/脚本是批处理文件,没有参数,并且启动位置在批处理文件所在的目录中。

任何帮助都将不胜感激!


还有其他人解决了这个问题吗?因为对我来说,所有的“解决方案”都不起作用,如果从任务计划程序中运行脚本,则脚本在完成后会一直挂起。我将继续进行故障排除,可能会制作某种批处理脚本来处理它,但现在我卡住了。谢谢! - jacktrader
4个回答

3
把你的Python代码放在一个名为main()的函数中,并且给出:
if __name__ == '__main__':
    main()

最后测试通过。对我有效。


3

@pk2019的答案真的帮了我很多。

一个改进的方法是使用

drv = webdriver.Chrome()

# Do your things.
...


drv.close()
drv.quit()

无需执行繁琐的任务终止操作。

谢谢,这个方法对我很有效,因为尽管我选择了在打开新实例之前关闭实例的选项,但Python控制台仍然保持打开状态,导致我有一堆控制台。 - Wak

0

我在Windows上使用Python selenium网页爬虫运行geckodriver.exe Firefox web driver时遇到了类似的问题(通过使用.bat文件通过任务计划程序执行)。问题是,当Python脚本完成后,我的geckodriver.exe进程仍在运行...我认为正在运行的进程阻止了Windows命令提示符关闭。

为了测试这个想法,我在.bat文件中插入了tasklist命令,在Python脚本之前和之后都打印出正在运行的Windows任务列表到控制台...我注意到当Python脚本完成时,geckodriver.exe文件仍在运行。

使用taskkill杀死Windows进程的方法在这两个不同的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。那样可以正常工作。


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脚本并退出。


/WAIT 功能完美,但是在 Python 脚本中编写的 sys.exit() 和 quit() 不起作用。 - Chris
我认为需要退出的可能是由start命令创建的控制台窗口,而不是Python脚本。也许你最好使用另一个调用语句而不是start。你需要在单独的窗口中运行Python脚本吗? - DSway
我其实不想让 Python 脚本在一个单独的窗口中运行。如果它能在同一个窗口中运行,那就太好了。我试图只调用 Python 语句,但现在命令提示符没有关闭。它显示了退出命令,但实际上并没有关闭。 - Chris
Python是否仍在运行(任务管理器)?如果手动输入close,控制台窗口会关闭吗? - DSway
Python仍在运行,控制台窗口不允许我在内部键入任何内容。我可以使用x按钮或按ctrl+c退出。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接