在Python退出后仍在前台生成子进程

1 投票
1 回答
3485 浏览
提问于 2025-04-17 22:30

假设有一个叫做 resolve_ip.py 的 Python 脚本,它可以神奇地返回我们关心的机器的 IP 地址。

我想学习如何用 Python 实现以下 bash 命令的效果:

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

在这个 bash 示例中,运行 Python 脚本后,它的返回值会替代原来的位置,然后作为输入提供给 ssh 程序。结果是,Python 程序结束后,用户可以与 ssh 进行交互。

问题是,这种方法需要使用两个脚本(一个 bash 脚本来运行 ssh,另一个是 Python 脚本来返回参数),或者需要人工直接输入上面的 bash 命令。

问题:

有没有办法仅使用 Python,通过 subprocess 或类似的模块,启动一个交互式服务(比如 ssh),并让这个子进程在父进程(Python)结束后仍然保持在前台运行?

考虑事项:

在这个问题中,重点不是如何从 Python 中提交 ssh 凭据给 ssh,而是如何生成一个子进程,使其在父进程结束后继续在前台运行。

编辑:

以下资源与此相关:

1 个回答

5

我觉得你想要使用"exec"这个功能。用法如下:

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

这个操作会把当前的Python程序替换成ssh程序,然后继续运行。也就是说,最后的效果就像你直接运行了ssh,而Python解释器就不再执行任何代码了。

撰写回答