假设存在一个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终止后继续运行。
编辑: 以下资源是相关的:
答案 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一样,并且解释器将不再执行。