【问题标题】:Keep running python even though exit code即使退出代码也继续运行 python
【发布时间】:2021-11-03 07:29:04
【问题描述】:

我正在从 python 2.7 调用一个外部程序,作为该程序的输入,我有一些参数。我无权访问我正在调用的程序的代码。对于这些参数的某些组合,程序崩溃并返回退出代码,并且没有错误;通常是“进程以退出代码 -1073741819 (0xC0000005) 完成”。我想要做的是:每当它因退出代码而失败时,我希望它使用新的初始参数重新运行脚本。我尝试了一些东西:

parameters1 = [1, 2, 3, 4]
parameters2 = [2, 3, 4, 5]
j = 0
q = 0
while j == 0:
    parameter1 = parameters1[q]
    parameter2 = parameters2[q]
    try:
        f3d.run(parameter1 = parameter1, parameter2 = parameter2)
        j = 1
    except:
        pass

【问题讨论】:

  • 不清楚您在哪里运行外部程序。 f3d.run 仍然是对 Python 函数的调用。
  • 您还应该在问题中包含(完整)错误。
  • try-except: pass 往往是一件非常糟糕的事情:它忽略每一个错误,并且不处理它们。错误实际上是一件好事,但是使用 try-except: pass 块,您会将它们变成错误(您的程序/数据失败,但没有人会知道)。
  • 关于此错误消息的问题有很多(很容易搜索);似乎都与 PyCharm 有关,偶尔重新安装会有所帮助。你在使用 PyCharm 吗?
  • "我尝试了一些方法:" 好的,当你尝试的时候发生了什么?相反应该发生什么,这有什么不同?

标签: python python-2.7 exit-code


【解决方案1】:

虽然问题很不清楚,但我认为这是您想要实现的目标:

runner.py:

SLEEP_TIME = 3
print('Starting run...')

while True:

    exit_code = subprocess.call(['python', 'foo.py', parameter_1, parameter_2])
    print('Script Stopped.')

    if exit_code == -1073741819:
        # change parameter_1 and parameter_2 here

    print('Sleeping for %d seconds' % SLEEP_TIME)
    time.sleep(SLEEP_TIME)
    print('Restarting...')

foo.py:

import sys
parameter_1 = sys.argv[1]
parameter_2 = sys.argv[2]

# Your code here

您运行runner.py,它将无限重启。

另外,不需要的建议:不要使用 Python2.7。它已经过时了。

【讨论】:

    【解决方案2】:

    非常感谢您提供快速而良好的答案!这就是我一直在寻找的。 我不得不使用Python2.7来兼容外部软件。 祝您有美好的一天,我的好先生/女士!

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多