当我输入命令时,如何让 Python 查看终端输出的内容?

How do I let Python see what Terminal outputs when I enter a command?

我想在 macOS Sierra Python 上 运行 一个程序,在我自动输入命令后检查终端的输出。例如,我会在终端中写:

$ pwd

然后终端会输出如下内容:

/Users/username

我如何 Python 扫描终端输出的内容并将其作为字符串设置为变量?

>>>output = (whatever Terminal outputs)
>>>print (output)
"/Users/username"

顺便说一句,其他论坛并没有详细解释如何在 macOS 中执行此操作。因此,这不是任何论坛的副本。

您可以将输出通过管道传输到文件并读取文件。

$ pwd > output.txt

然后读取文件并根据其内容采取进一步的行动。

使用 subprocess 模块,它有一些快捷方式可以使事情比使用 Popen 更简单、更简单。

>>> import subprocess
>>> output = subprocess.check_output("pwd")
>>> print(output)
b'L:\\r\n'

如果愿意,您可以使用 output.decode("UTF-8") 对其进行解码,或者您可以使用 universal_newlines 关键字参数使其自动完成并整理换行符。

>>> subprocess.check_output("pwd", universal_newlines=True)
'L:\\n'

编辑: 根据 @Silvio's 明智的建议,传递所有参数,您可以执行以下操作:

subprocess.check_output(["ls", "-l"])

或者,如果您有一个来自其他地方的字符串,您可以调用 .split(),这将生成一个由 space.

分隔的子字符串列表
subprocess.check_output("ls -l /".split())

注意:我在 Windows 和 Gnu on Windows 上使用 Python3,所以我有 \r\n 行结尾和 pwd.