![python +如何打印来自os.system的值](https://linux22.com/image/126005/python%20%2B%E5%A6%82%E4%BD%95%E6%89%93%E5%8D%B0%E6%9D%A5%E8%87%AAos.system%E7%9A%84%E5%80%BC.png)
为什么这个简单的 python 脚本不打印真正的 redhat 版本?
version = os.system( ' cat /etc/redhat-release | awk \'{print $7}\' ' )
print ("my version is " ,version)
当我运行它时
我们有:
7.2
('my version is ', 0)
- 为什么我们得到 0 而不是 7.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())