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