Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使程序在Python中意外退出后再次运行?_Python_Irc - Fatal编程技术网

如何使程序在Python中意外退出后再次运行?

如何使程序在Python中意外退出后再次运行?,python,irc,Python,Irc,我正在用Python编写一个IRC机器人,由于它的alpha特性,它可能会出现意外错误并退出 我可以使用哪些技术使程序再次运行?最简单的方法是捕获错误,并在捕获错误时关闭旧实例并打开程序的新实例 请注意,它不会一直工作(如果它停止工作而不抛出错误)。最简单的方法是捕获错误,并在捕获错误时关闭旧的程序实例并打开新的程序实例 请注意,它不会一直工作(如果它停止工作而不抛出错误)。您可以使用subprocess()创建包装,它将生成应用程序作为子进程并跟踪其执行情况。您可以使用subprocess()

我正在用Python编写一个IRC机器人,由于它的alpha特性,它可能会出现意外错误并退出


我可以使用哪些技术使程序再次运行?

最简单的方法是捕获错误,并在捕获错误时关闭旧实例并打开程序的新实例


请注意,它不会一直工作(如果它停止工作而不抛出错误)。

最简单的方法是捕获错误,并在捕获错误时关闭旧的程序实例并打开新的程序实例


请注意,它不会一直工作(如果它停止工作而不抛出错误)。

您可以使用subprocess()创建包装,它将生成应用程序作为子进程并跟踪其执行情况。

您可以使用subprocess()创建包装它将生成应用程序作为子进程,并跟踪其执行情况。

您可以使用
sys.exit()
来告知程序异常退出(通常,如果出现错误,会返回1)

您的Python脚本可能如下所示:

import sys

def main():
    # ...

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print >> sys.stderr,  e
        sys.exit(1)
    else:
        sys.exit()
import subprocess

command = 'thescript'
args = ['arg1', 'arg2']

while True:
    ret_code = subprocess.call([command] + args)

    if ret_code == 0:
        break
如果出现错误,可以再次调用
main()
,但程序可能未处于可以再次正常工作的状态。 相反,在新流程中启动该计划可能更安全

因此,您可以编写一个脚本来调用Python脚本,在脚本完成时获取其返回值,如果返回值不同于0(默认情况下,
sys.exit()
使用0作为返回值),则重新启动该脚本。 这可能看起来像这样:

import sys

def main():
    # ...

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print >> sys.stderr,  e
        sys.exit(1)
    else:
        sys.exit()
import subprocess

command = 'thescript'
args = ['arg1', 'arg2']

while True:
    ret_code = subprocess.call([command] + args)

    if ret_code == 0:
        break
您可以使用
sys.exit()
来判断程序是否异常退出(通常,如果出现错误,将返回1)

您的Python脚本可能如下所示:

import sys

def main():
    # ...

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print >> sys.stderr,  e
        sys.exit(1)
    else:
        sys.exit()
import subprocess

command = 'thescript'
args = ['arg1', 'arg2']

while True:
    ret_code = subprocess.call([command] + args)

    if ret_code == 0:
        break
如果出现错误,可以再次调用
main()
,但程序可能未处于可以再次正常工作的状态。 相反,在新流程中启动该计划可能更安全

因此,您可以编写一个脚本来调用Python脚本,在脚本完成时获取其返回值,如果返回值不同于0(默认情况下,
sys.exit()
使用0作为返回值),则重新启动该脚本。 这可能看起来像这样:

import sys

def main():
    # ...

if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print >> sys.stderr,  e
        sys.exit(1)
    else:
        sys.exit()
import subprocess

command = 'thescript'
args = ['arg1', 'arg2']

while True:
    ret_code = subprocess.call([command] + args)

    if ret_code == 0:
        break

我只是注意到我的答案有点不正确:“一般情况下,出错时返回0”应该是“一般情况下,出错时返回1”。现在已经更正了。我刚刚注意到我的回答有点不正确:“一般情况下,出错时返回0”应该是“一般情况下,出错时返回1”。现在更正了。