我试过这样的事情:
subprocess.Popen(['nohup', 'my_command'],
stdout=open('/dev/null', 'w'),
stderr=open('logfile.log', 'a'))
Run Code Online (Sandbox Code Playgroud)
如果父脚本正常退出,则此方法有效,但如果我终止脚本(Ctrl-C),则所有子进程也将被终止.有办法避免这种情况吗?
我关心的平台是OS X和Linux,使用的是Python 2.6 和 Python 2.7.
我想创建一个父进程,它将创建许多子进程.由于父进程负责创建子进程,因此父进程不关心子进程的状态.
由于subprocess.call是阻塞的,它不起作用.因此我使用subprocess.Popen来替换call.然而,一旦孩子终止(链接),Popen将生成僵尸(已解散)进程.
有没有办法解决这个问题?
提前致谢
假设存在一个python脚本resolve_ip.py,它神奇地返回了我们关心的机器的字符串IP。
我对学习如何实现与以下bash命令等效的python感兴趣:
user@host:~$ ssh $(./resolve_ip.py)
Run Code Online (Sandbox Code Playgroud)
在此bash示例中,在运行python脚本之后,将其替换或替代为它的返回值,该返回值又作为程序ssh的输入提供。结果是,python程序终止,并且用户与ssh初始化进行交互。
问题是,此解决方案需要使用2个脚本(运行ssh的bash脚本,与python脚本结合使用以返回参数),或者人工干预以直接按上面的格式键入bash命令。
题:
有没有一种方法,仅使用python,通过使用子进程或某些类似的模块来启动/分叉交互式服务(如ssh),并使此分叉的子进程在前台仍处于活动状态,即使其父级(python)拥有sys .exit()要?
注意事项:
在这种情况下,此问题的重点不是编写从Python内部向ssh提交ssh凭据的脚本。它是如何生成子进程的子进程,该子进程在其父/子生成器终止后将继续在前台运行。
编辑:以下资源相关: