如何在运行之后硬暂停或暂停python脚本,以便在完成后不强制关闭?

时间:2018-05-31 20:27:14

标签: python loops pause

嗨所以我正在研究一个涉及循环函数的python脚本,到目前为止循环函数进程由于某种原因失败了(虽然我知道为什么)但问题是我有os.system('暂停')并在代码末尾输入(“prompt:”)以暂停所有活动,以便我可以在脚本完成和终止之前读取错误消息,但脚本仍然关闭,我需要一种方法来暂停它或者在窗口突然关闭之前冻结。需要帮助和任何进一步的见解。

聚苯乙烯。如果您需要更多信息以便更好地描述此问题,请与我们联系。

2 个答案:

答案 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退出,我只需要从这个包装器中执行它而不是一旦它到达主脚本。

这有点像你正在寻找的吗?

答案基本上是,您必须抓住所有异常,并在找出问题并解决问题后有一种重启循环的方法。