[英]How to store output of os.system() in a variable
我写了一个小代码:
import os
os.system('users')
os.system('w')
这打印
ubuntu
09:27:25 up 9 days, 21:23, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 42.99.164.66 09:06 5.00s 0.10s 0.00s sh -c w
但当我尝试:
import os
from pyslack import SlackClient
user_name = os.system('users')
login_details = os.system('w')
print user_name
print login_details
它有以下输出:
ubuntu
09:28:32 up 9 days, 21:24, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 42.99.164.66 09:06 0.00s 0.11s 0.00s w
0
0
现在我不知道为什么我无法将结果存储在变量中,即为什么打印0? 什么应该是摆脱它的正确方法?
os.system返回的值与您启动的命令的返回值相同。 由于大多数调用(如“用户”)都是用C语言编写的,因此当代码执行成功时它们返回0(它们return 0;
在main()
的末尾)。
如果要保存输出,可以将其输出路径(默认情况下为stdout
)重定向到文本文件,然后读取文本文件。
user_name = os.system('users > users.txt')
login_details = os.system('w > w.txt')
with open("users.txt", "r") as f:
for line in f:
print line
with open("w.txt", "r") as f:
for line in f:
print line
os.system("rm users.txt")
os.system("rm w.txt")
我向subprocess.check_output
解决方案低头
os.system
只是在子shell中执行命令(字符串)。
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 42.99.164.66 09:06 5.00s 0.10s 0.00s sh -c w
这意味着上面的数据是通过调用标准C函数system()
而不是返回值写入stdout的输出。
在Unix上, 返回值是以wait()指定的格式编码的进程的退出状态 。 请注意,POSIX未指定C system()函数的返回值的含义,因此Python函数的返回值取决于系统。
在Windows上, 返回值是系统shell在运行命令后返回的值 ,由Windows环境变量COMSPEC给出:在command.com系统上(Windows 95,98和ME),它始终为0; 在cmd.exe系统(Windows NT,2000和XP)上,这是命令运行的退出状态; 在使用非本机shell的系统上,请参阅shell文档。
因此,如果退出状态为success,则user_name
和login_details
将为零。
事实上,你可以试试这个:
import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])
print(user)
print(details)
os.system
返回命令的退出代码。
要捕获命令的输出,可以使用subprocess.check_output
output = subprocess.check_output('users', shell=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.