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

时间:2017-05-03 09:34:02

标签: python os.system

我写了一个小代码:

public class Contracts{

  public function web(){
    $collection = $this->hasMany('App\Web');
    return  $collection ? $collection : [];
  }

}

打印

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

现在我不确定为什么我无法将结果存储在varible中,即为什么打印0?什么应该是摆脱它的正确方法?

3 个答案:

答案 0 :(得分:2)

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解决方案

答案 1 :(得分:2)

来自os.system(command)

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()而非返回值写入标准输出的输出。

  

在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文档。

因此,如果退出状态成功,user_namelogin_details将获得零。

事实上,你可以试试这个:;

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

print(user)
print(details)

答案 2 :(得分:2)

os.system返回命令的退出代码。

要捕获命令的输出,您可以使用subprocess.check_output

output = subprocess.check_output('users', shell=True)