Python - 运行 shell 命令,获取 stdout 和 stderr 作为变量,但对用户隐藏?

num*_*623 5 python subprocess capture python-3.x

我想让我的 Python 脚本运行 Linux shell 命令并将输出存储在变量中,而不向用户显示命令的输出。我已经尝试过这个os.systemsubprocess.check_outputsubprocess.runsubprocess.Popen没有os.popen运气

我当前的方法正在运行os.system("ls -l &> /tmp/test_file"),因此命令 stdout 和 stderr 通过管道传输到/tmp/test_file,然后我让我的 Python 代码将文件读取到变量中,然后将其删除。

有没有更好的方法来做到这一点,以便我可以将命令输出直接发送到变量中,而不必创建和删除文件,但对用户隐藏它?

Sha*_*m09 9

您可以使用该subprocess.run功能。


@Ashley Kleynhans 所说的一项更新

“stdout 和 stderr 的结果是字节对象,因此如果您想将它们作为字符串处理,则需要对它们进行解码”

为此,您不需要 decodestdout 或 stderr,因为在run方法中您可以再传递一个参数来获取字符串形式的返回数据,即text=True

“如果使用,它必须是字节序列,或者如果指定了编码或错误或文本为真,则必须是字符串 -来自文档


from subprocess import run

data = run("ANY COMMAND HERE", capture_output=True, shell=True, text=True)
print(data.stdout) # If you want you can save it to a variable
print(data.stderr) # ^^
Run Code Online (Sandbox Code Playgroud)