即使在python退出之后,也会在前台生成一个子进程

时间:2014-03-16 06:54:04

标签: python bash ssh subprocess fork

假设存在一个python脚本resolve_ip.py,它会神奇地返回我们关心的机器的字符串IP。

我有兴趣学习如何实现python等效的以下bash命令:

user@host:~$ ssh $(./resolve_ip.py)

在这个bash示例中,在python脚本运行之后,它被替换或替换为其返回值,而返回值又作为程序ssh的输入提供。结果是,python程序终止,用户与ssh初始化交互。

问题是,这个解决方案需要使用2个脚本(运行ssh的bash脚本,结合python脚本返回参数),或者人为干预,直接按照上面的格式键入bash命令。

问题:

有没有办法,只使用python,通过使用子进程或一些类似的模块来启动/分叉交互式服务(如ssh),并使这个分叉的子进程在前台保持活动,即使在其父级(python)之后)有sys.exit()'d?

考虑:

在这种情况下,这个问题的重点不是编写从Python中向ssh提交ssh凭据的脚本。它是如何产生一个子进程,它继续在其父/ spawner终止后继续运行。

编辑: 以下资源是相关的:

1 个答案:

答案 0 :(得分:4)

我想你想" exec"。像这样:

import resolve_ip
import os
host = resolve_ip.get_host_to_use() # you figure this part out
os.execlp('ssh', 'ssh', host)

这将用ssh过程映像替换Python解释器进程映像,并继续运行。所以你最终会像运行ssh而不是Python一样,并且解释器将不再执行。