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

l3zydbqr  于 6个月前  发布在  Windows
关注(0)|答案(4)|浏览(100)

我正在尝试在任务调度程序中调度:
1.运行批处理文件
1.激活conda环境
1.运行Python程序
1.退出命令提示符
一切正常,除了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()


最后一点,程序/脚本是批处理文件,没有参数,开始在批处理文件所在的目录中。
任何帮助将不胜感激!

odopli94

odopli941#

把你的python代码放在main()函数中。
并给予:

if __name__ == '__main__':
    main()

字符串
最后。刚刚测试过的对我来说很有效。

bcs8qyzn

bcs8qyzn2#

@pk2019的回答真的帮到我了。
一个改进是使用

drv = webdriver.Chrome()

# Do your things.
...

drv.close()
drv.quit()

字符串
不需要做杀人的脏活。

r55awzrz

r55awzrz3#

我不是一个pythonMaven,但我认为你只需要call sys.exit() or quit()
不要使用sleep并等待太长时间或可能不够长,而是使用wait选项调用start:

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

字符串
如果你不需要这个批处理文件来做任何其他的事情,你可以启动python脚本并退出。

neskvpey

neskvpey4#

我在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. Safely killing a python script on Windows
  2. Batch script to close all open Command Prompt windows
  3. How to close Command Prompt window after Batch file execution in python?
    以下是taskkill的Windows文档:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/taskkill
    在我的例子中,我把它作为倒数第二行:taskkill /im geckodriver.exe /f,最后一行是exit

相关问题