我如何将 shell 命令输出存储到 python 中的变量?

How would I store the shell command output to a variable in python?

代码:

# cat mylinux.py
# This program is to interact with Linux

import os

v = os.system("cat /etc/redhat-release")

输出:

# python mylinux.py
Red Hat Enterprise Linux Server release 7.6 (Maipo)

在上面的输出中,无论我定义用于存储输出的变量如何,都会显示命令输出。

如何仅使用 os.system 方法将 shell 命令输出存储到变量?

通过使用模块 subprocess. It is included in Python's standard library and aims to be the substitute of os.system. (Note that the parameter capture_output of subprocess.run 已在 Python 3.7)

中引入
>>> import subprocess
>>> subprocess.run(['cat', '/etc/hostname'], capture_output=True)
CompletedProcess(args=['cat', '/etc/hostname'], returncode=0, stdout='example.com\n', stderr=b'')
>>> subprocess.run(['cat', '/etc/hostname'], capture_output=True).stdout.decode()
'example.com\n'

在你的情况下,只需:

import subprocess

v = subprocess.run(['cat', '/etc/redhat-release'], capture_output=True).stdout.decode()

更新:您可以使用标准库提供的shlex.split轻松拆分shell命令。

>>> import shlex
>>> shlex.split('cat /etc/redhat-release')
['cat', '/etc/redhat-release']
>>> subprocess.run(shlex.split('cat /etc/hostname'), capture_output=True).stdout.decode()
'example.com\n'

更新 2:os.popen @Matthias 提到

但是,这个函数不可能将stdout和stderr分开。

import os

v = os.popen('cat /etc/redhat-release').read()