python +如何打印来自os.system的值

python +如何打印来自os.system的值

为什么这个简单的 python 脚本不打印真正的 redhat 版本?

version = os.system( ' cat /etc/redhat-release  | awk \'{print $7}\' '  )
print ("my version is " ,version)

当我运行它时

我们有:

7.2
('my version is ', 0)
  1. 为什么我们得到 0 而不是 7.2?
  2. 如何避免从 os.system 获取版本 - 7.2 ?

答案1

os.system()只是运行进程,它不捕获输出:

如果命令生成任何输出,它将被发送到解释器标准输出流。

返回值是进程的退出代码:

在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态。

你需要使用类似的东西subprocess.check_output()subprocess.Popen()直接捕获输出。

>>> arch = subprocess.check_output("uname -a | awk '{print $9}'", shell=True);
>>> arch
'x86_64\n'

答案2

您可以使用subprocess模块并相当容易地实现这一点。

#!/usr/bin/python3

import subprocess
getVersion =  subprocess.Popen("awk '{print $7}' /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout
version =  getVersion.read()

print("My version is", version.decode())

另外,对于awk零件,您可以使用 sed 's/[^0-9_.-]//g /etc/redhat-release.这只会提取版本号,不需要知道版本号是什么字段,这使得它更加独立于平台。

答案3

例如,您可以执行以下操作:

os.system("ping 1.1.1.1 >> ping.txt")
with open("ping.txt", "r") as ping:
    print(ping.read())

相关内容