2024-10-01 02:20:25 发布
网友
我正在寻找一个类似于以下内容的python:
until python program.py; do echo "Crashed...Restarting..." >&2 sleep 1 done
还有,我要杀人程序.py当父程序被终止时。有什么建议吗?你知道吗
#!/usr/bin/python import os import signal import subprocess import sys import time Proc = None def signal_handler(sig, frame): ''' Kill the program ''' os.kill(Proc.pid, sig) sys.exit(0) def main(): global Proc ''' Handle signal on parent program ''' signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGINT, signal_handler) Proc = subprocess.Popen(['python', 'program.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) while True: try: wait = Proc.wait() if wait: if wait != (-1 * signal.SIGKILL): print "Restarting ....(return code %d)" % wait time.sleep(1) Proc = subprocess.Popen(['python', 'program.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) else: ''' kill yourself ''' sys.exit(0) except KeyboardInterrupt: # If python >= 2.6 # Proc.kill() sys.exit(0) if __name__ == '__main__': main()
如果您可以更改program.py,我会修改它,以便您可以直接调用它,而不是在子进程中调用它。如果您的程序遵循只包含定义的约定,并且只在直接调用时才执行最终可执行部分,即
program.py
def do_something(): pass def do_something_else(): pass if __name__ == '__main__': do_something() do_something_else()
在函数中包装最后一个块就足够了,例如
def main(): do_something() do_something_else() if __name__ == '__main__': main()
此时,只需导入program.py模块并调用program.main(),代码就简单多了。你知道吗
program.main()
模块subprocess和psutil应该提供您所需要的大部分(如果不是全部的话)。你知道吗
subprocess
psutil
import sys, subprocess while True : retCode= subprocess.call(["python","program.py"]) if retCode == 0 : break print('Crashed...Restarting...', file=sys.stderr )
如果您可以更改
program.py
,我会修改它,以便您可以直接调用它,而不是在子进程中调用它。如果您的程序遵循只包含定义的约定,并且只在直接调用时才执行最终可执行部分,即在函数中包装最后一个块就足够了,例如
此时,只需导入
program.py
模块并调用program.main()
,代码就简单多了。你知道吗模块
subprocess
和psutil
应该提供您所需要的大部分(如果不是全部的话)。你知道吗相关问题 更多 >
编程相关推荐