嗨所以我正在研究一个涉及循环函数的python脚本,到目前为止循环函数进程由于某种原因失败了(虽然我知道为什么)但问题是我有os.system('暂停')并在代码末尾输入(“prompt:”)以暂停所有活动,以便我可以在脚本完成和终止之前读取错误消息,但脚本仍然关闭,我需要一种方法来暂停它或者在窗口突然关闭之前冻结。需要帮助和任何进一步的见解。
聚苯乙烯。如果您需要更多信息以便更好地描述此问题,请与我们联系。
答案 0 :(得分:2)
我认为你只是双击' Window Explorer上的图标。这有一个缺点,你在这里遇到的情况是shell(终端窗口)在进程结束时关闭,所以你不能告诉它如果由于错误而终止会出错。
更好的方法是使用command prompt
。如果您对此不熟悉,可以在线获得许多教程。
这对您的问题有帮助的原因是,一旦导航到包含目录的脚本,您可以使用python your_script.py
(假设python
在您的路径环境变量中)来运行同一个窗口中的脚本。
然后,即使它失败,您也可以阅读错误消息,因为您只会返回到命令行。
另一种hacky方法是创建一个名为run_pythons.py
的脚本,它将使用subprocess
模块在同一窗口中调用您的实际脚本,然后(无论它如何终止) ,在终止自身之前等待输入,以便您可以阅读错误消息。
类似于:
import subprocess
subprocess.call(('python', input('enter script name: ')))
input('press ENTER to kill me')
答案 1 :(得分:0)
我一度需要这样的东西。我有一个包装器,它加载了一堆模块和数据,然后等待提示运行一些东西。如果我在一个模块中有一个愚蠢的错误,它就会退出,并且将所有数据加载到内存中的时间将被浪费,这是> 1分钟。对我来说,我想要一种方法将数据保存在内存中,即使我在模块中有错误,这样我就可以编辑模块并重新运行脚本。
要做到这一点:
while True:
update = raw_input("Paused. Enter = start, 'your input' = update params, C-C = exit")
if update:
update = update.split()
#unrelevant stuff used to parse my update
#custom thing to reload all my modules
fullReload()
try:
#my main script that needed all those modules and data loaded
model_starter.main(stuff, stuff2)
except Exception as e:
print(e)
traceback.print_exc()
continue
except KeyboardInterrupt:
print("I think you hit C-C. Do it again to exit.")
continue
except:
print("OSERROR? sys.exit()? who knows. C-C to exit.")
continue
这保留了我在while
循环开始之前抓取的所有数据,并阻止退出错误。这也意味着我仍然可以ctrl+c
退出,我只需要从这个包装器中执行它而不是一旦它到达主脚本。
这有点像你正在寻找的吗?
答案基本上是,您必须抓住所有异常,并在找出问题并解决问题后有一种重启循环的方法。