如何在ArcMap的Python控制台中中断长时间运行的进程的执行?
例如,一旦开始,您如何打乱像下面这样的长时间迭代?
for i in range(1, 50):
# some long process which takes over a minute to complete
我想在运行控制台窗口中输入的代码时按键盘组合键,单击按钮或类似操作以随时停止该过程。
如何在ArcMap的Python控制台中中断长时间运行的进程的执行?
例如,一旦开始,您如何打乱像下面这样的长时间迭代?
for i in range(1, 50):
# some long process which takes over a minute to complete
我想在运行控制台窗口中输入的代码时按键盘组合键,单击按钮或类似操作以随时停止该过程。
Answers:
刚刚测试过,ESC 也不起作用。ArcGIS只是冻结了片刻,然后继续。一旦在ArcGIS Python控制台中运行它,似乎没有办法强制退出它。您也无法使用任务管理器将其杀死,因为Python进程未显示在此处。
如果您确实希望能够强制退出它,则可以考虑使用IDLE之类的IDE,而不是在ArcGIS Python控制台中进行操作。例如,在IDLE中,可以使用Ctrl+ Z或Ctrl+ C终止执行。
这是我使用的方法:
kill_processx.py文件的示例:
import os
nameof_killfile="stop_processx.txt"
if os.path.exists(nameof_killfile):
os.remove(nameof_killfile)
else:
killit=open(nameof_killfile,"w")
killit.close()
使用蛮力策略强制关机是一种不好的做法。相反,正如@Aragon指出的那样,您应该在脚本中添加错误处理以隔离组件和/或在不满足某些条件的情况下停止脚本。正如@RK指出的那样,ArcGIS python控制台对于运行复杂脚本几乎是一文不值,实际上,应保留用于简单操作-坚持使用IDLE,pythonwin,pyscripter或任何其他其他IDE。以下是与您的问题相关的讨论:
如果要以pythonic方式解决,请尝试以下操作:
import sys
sys.exit()
或使用:
raise SystemExit()
详细:
import time
import sys
sTime= time.time()
if time.time() - sTime > 60:
sys.exit()
我希望它可以帮助您...
sys.exit()
但是当循环或类似的长进程正在运行时,这将不起作用。