如何将OS.System()输出存储在变量中



我写了一个小代码:

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_namelogin_details将获得零。

实际上,您可以尝试以下方法:;

import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])
print(user)
print(details)

最新更新