在 Python 中,我如何 shell 退出并与外部程序(比如 vi 或 nano)进行交互以及 return 到 python

In Python, how could I shell out and interact with an external program (say vi or nano) and return to python

我关于 Whosebug 的第一个问题!

我正在尝试弄清楚如何启动一个需要用户与之交互的外部程序,比如 vi、nano、ssh、telnet 等,以及 return 到 Python 程序退出时的脚本。

我根本不想使用 send/expect 或自动化外部程序,只是启动它,正常使用它,然后 return 到脚本。我想 bash 似乎是一种更自然的方法,但我希望在 Python.

中完成它

使用集成 subprocess module。它与交互式应用程序配合得很好。 subprocess.call 启动应用程序并一直阻塞,直到应用程序退出。

例如启动 vi 并在退出后开始通过 ssh:

连接到 127.0.0.1
import subprocess
subprocess.call(["vi"])
subprocess.call(["ssh","127.0.0.1"])

您可以使用子流程模块。 示例可能如下所示:

import subprocess

process = subproces.Popen(
    [
        'path/to/the/executable',
        'optional argument',
        'more optional arguments',
        ...
    ],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
)
out, err = process.communicate()

您可以在这里找到更多信息:subprocess