我如何将 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()
代码:
# 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()