【问题标题】:How to wrap existing script with infinite loop?如何用无限循环包装现有脚本?
【发布时间】:2012-10-29 09:21:37
【问题描述】:

我的脚本有很多 sys.exit() 和 raw_input() 命令。 我想用无限循环包装它。 forever.py 正在从 Windows 空闲状态运行。 类似于下面的代码,但它不起作用。 在一台机器上,python 控制台窗口正在闪烁(无限循环启动过程 python,它似乎是合法的),但我没有输出。 我能做的更好吗?

模块 to_be_wrap.py:

import sys

def main():
    print('start')
    raw_input('any key')
    sys.exit(0)
    print('end')

模块永远.py:

import subprocess as subp
def forever():
    while 1:
        try:
            cmd = ['python', 'to_be_wrap.py']
            print subp.check_output(cmd)
        except Exception as e:
            print e
forever()

【问题讨论】:

    标签: python loops exit


    【解决方案1】:

    这应该像预期的那样工作。只需纠正这两件事:

    1. 如果要打印“结束”,请将其放在 sys.exit(0) 语句之前
    2. 模块 to_be_wrap.py 中没有函数 main() 的调用。在文件末尾添加语句main()

    【讨论】:

      【解决方案2】:

      您似乎正在创建类似于 REPL (read-eval-print loop) 的东西,尽管您的 main() 方法目前似乎没有做任何有用的事情。

      This blog post 描述了一种相当严格的方法。 This gist(上述博客文章的一部分)展示了 REPL 的“核心”,但将 read 和 eval 逻辑的实现留给您。

      【讨论】:

      • to_be_wraped.py 只是我的脚本的最小化版本。真正的版本包含许多行并且做了很多事情。 to_be_wrapped.py 看起来像上面,因为我认为 sys.exit 和 raw_input 最麻烦
      猜你喜欢
      • 2019-03-31
      • 2013-03-22
      • 1970-01-01
      • 2019-04-02
      • 2015-04-27
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多