【问题标题】:cut off python script in shell and go to interpreter preserve state切断 shell 中的 python 脚本并转到解释器保留状态
【发布时间】:2014-08-06 10:42:02
【问题描述】:

我知道有一些方法可以编写 Python 脚本,以便在从终端执行时,您将进入解释器并保留变量的结束状态。

是否可以在执行过程中中断 python 脚本并进入解释器,并保留脚本中的状态?例如,我有一个大循环,在每次迭代时都会将一个新的键值对输入到字典中。在循环结束时,字典被写入文件。现在运行脚本几个小时后,我意识到它不值得让它完成,但我仍然希望看到字典。

脚本现在正在我的终端中运行 - 是否有任何可以从这里跳转到解释器并查看字典的当前状态?

编辑:在运行脚本后进入解释器(状态保留)

python -i script.py

【问题讨论】:

  • “我明白有办法” 哪些办法?请描述。
  • 您可能想学习使用 Python 调试器 pdb

标签: python shell


【解决方案1】:

如果您已经在运行它,您不能只是将它“拖放”到交互式控制台中

但是,您可以尝试使用 gdb 附加到正在运行的进程,请参阅https://wiki.python.org/moin/DebuggingWithGdb

$ gdb python <pid of running process>

然后尝试像使用 C 进程一样调试它。

另见python: is it possible to attach a console into a running process

【讨论】:

    【解决方案2】:

    这里有点肮脏的解决方法的例子,使用 try except 和 raw_input(对于 python 2.7)。这不会让您进入解释器,但您可以使用 ctrl+c 暂停脚本并打印所需的变量以了解其状态。

    import time
    
    t = 0
    
    while 1:
        try:
            print time.time()
            time.sleep(5)
            t += 1
        except KeyboardInterrupt:
            print '\nt = {}'.format(t)
            # time.sleep(5)
            raw_input("Script paused! Enter anything to continue or press Ctrl+C to stop execution.")
    

    你甚至可以在 except 块中调用 pdb:

    import pdb
    pdb.set_trace()
    

    进入调试器,您可以在其中使用 python 控制台。

    【讨论】:

      【解决方案3】:

      不,你不能。如果要从具体状态重新启动脚本,则必须保留此状态并在重新启动脚本执行时加载它。在您的情况下,使用具有计算值和其他值的临时文件来控制流程。并且不要忘记删除成功的文件。

      【讨论】:

      • 对不起,我还是有点糊涂。你的意思是说我至少可以暂停脚本并在以后继续运行它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2013-01-05
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多