退出命令以停止python文件执行
我正在从另一个python脚本执行python脚本submit.py,如下所示:退出命令以停止python文件执行,python,try-catch,exit,Python,Try Catch,Exit,我正在从另一个python脚本执行python脚本submit.py,如下所示: response=os.popen(“python3 static/submit.py”+竞赛id+“”+任务id).read() 打印(答复) 但我无法找到正确的退出命令来停止脚本的执行 提交.py: 导入系统 导入操作系统 导入时间 从凭据导入用户名、密码 从selenium导入webdriver 从selenium.webdriver.common.keys导入密钥 从selenium.webdriver.
response=os.popen(“python3 static/submit.py”+竞赛id+“”+任务id).read()
打印(答复)
但我无法找到正确的退出命令来停止脚本的执行
提交.py:
导入系统
导入操作系统
导入时间
从凭据导入用户名、密码
从selenium导入webdriver
从selenium.webdriver.common.keys导入密钥
从selenium.webdriver.common.by导入
竞赛id=(sys.argv)[1]
任务id=(sys.argv)[2]
url=”https://codeforces.com/contest/“+竞赛id+”/问题/“+任务id”
尝试:
chrome\u options=webdriver.ChromeOptions()
chrome_选项。添加_参数('--headless')
driver=webdriver.Chrome('chromedriver',Chrome\u options=Chrome\u options)
除:
打印(“WEBDRIVER错误”)
#退出命令
尝试:
获取驱动程序(url)
除:
打印(“网络错误/站点不可用”)
#退出命令
回车=驱动程序。查找元素(按.LINK_文本“回车”)
输入。单击()
user\u name=driver.find\u element\u by\u id(“handleOrEmail”)
用户名。发送密钥(用户名)
password=驱动程序。通过\u id(“密码”)查找\u元素\u
密码。发送密钥(密码)
提交=驱动程序。按类名称查找元素(“提交”)
提交。单击()
时间。睡眠(10)
尝试:
错误\u source\u file=驱动程序。按\u类\u名称(“shiftUp”)查找\u元素
打印(“无效凭证”)
#退出命令
除:
通过
语言=驱动程序。按名称(“programTypeId”)查找元素
语言。发送密钥(“GNU G++17 7.3.0”)
sourceFile=驱动程序。按名称查找元素(“sourceFile”)
sourceFile.send_key(os.path.abspath(“竞赛/cf_”+str(竞赛id)+“/”+task_id+”.cpp”))
submit\u btn=驱动程序。按类名称查找元素(“submit”)
提交\u btn.单击()
尝试:
错误\u source\u file=驱动程序。按\u类\u名称(“shiftUp”)查找\u元素
打印(“重复代码提交”)
除:
打印(“提交的解决方案”)
驱动程序关闭()
在注释退出命令(#exit命令)的每个位置,我都需要适当的退出命令来放置注释
更新:
使用错误的凭据,我尝试使用sys.exit()作为exit命令,它抛出错误:
Traceback (most recent call last):
File "static/submit.py", line 44, in <module>
language = driver.find_element_by_name("programTypeId")
File "/home/pk/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 496, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
File "/home/pk/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
'value': value})['value']
File "/home/pk/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/pk/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"programTypeId"}
(Session info: headless chrome=75.0.3770.90)
(Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.15.0-50-generic x86_64)
INVALID CREDENTIALS
回溯(最近一次呼叫最后一次):
文件“static/submit.py”,第44行,在
语言=驱动程序。按名称(“programTypeId”)查找元素
文件“/home/pk/.local/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第496行,按名称查找元素
返回self.find_元素(by=by.NAME,value=NAME)
文件“/home/pk/.local/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第978行,在find_元素中
'value':value})['value']
文件“/home/pk/.local/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,执行中第321行
self.error\u handler.check\u响应(响应)
文件“/home/pk/.local/lib/python3.6/site packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“名称”,“选择器”:“programTypeId”}
(会话信息:无头镀铬=75.0.3770.90)
(驱动程序信息:chromedriver=2.41.578700(2f1ed5f9343c13f73144538f15c00b370eda6706),平台=Linux 4.15.0-50-generic x86_64)
无效凭证
最后一行是返回的响应。因此,可以看到脚本执行不会在exit命令时停止。因为您正在导入sys,所以只需使用exit()
结束程序即可
代码:
sys.exit()
更新:
这对我来说没有问题。请尝试此代码并亲自查看
import sys
if sys.argv[1] == 'x':
print("Im exiting now!")
sys.exit()
else:
print("Im not exiting")
print("Here is another string")
我尝试使用无效的凭据。所以,响应被证明是“无效凭证”,正如示例所示,但它也在第44行抛出一个错误,以获取“programTypeId”元素。因此,我认为sys.exit()不起作用。如果
driver.find\u element\u by\u class\u name(“shiftUp”)
引发异常,那么您将捕获到该异常,因此将永远不会调用sys.exit()。您需要更改逻辑。是否尝试从控制台运行submit.py文件而不是另一个文件?我只想这样。如果存在“shiftUp”类,则只有它应该退出,否则继续执行。它返回了正确的响应,但出现了相同的错误。请不要使用,除非:
不使用raise
,否则会隐藏错误