繁体   English   中英

如何在变量中存储os.system()的输出

[英]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(命令)

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_namelogin_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM