我写了一个小代码:
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
返回命令的退出代码。
要捕获命令的输出,您可以使用subprocess.check_output
output = subprocess.check_output('users', shell=True)
OS.System返回的值与您启动的命令的返回值相同。由于大多数呼叫(例如"用户"(是在C中写入代码时返回0的(它们在main()
末尾具有return 0;
(。
如果要保存其输出,则可以将其输出路径(默认情况下的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(命令(。
os.system
只需在子壳中执行命令(字符串(即可。
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()
而不是返回值。。
在UNIX上,返回值是编码中编码的过程的退出状态 指定的等待格式((。请注意,POSIX未指定 C System((函数的返回值的含义,因此返回 Python函数的值是系统依赖的。
在Windows上,返回值是由System Shell返回的 运行命令后,由Windows环境变量给出 comspec:在Command.com Systems(Windows 95,98和我(上 0;在cmd.exe Systems(Windows NT,2000和XP(上,这是出口 命令运行的状态;在使用非本地外壳的系统上 咨询您的外壳文档。
因此,如果退出状态成功,user_name
和login_details
将获得零。
实际上,您可以尝试以下方法:;
import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])
print(user)
print(details)