处理os.system的结果

时间:2015-07-07 07:43:07

标签: python os.system

我正在使用python编写功能脚本脚本,我无法处理此命令行的结果:

os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name)

它显示了我的pids,但我不能将它用作List。

如果我测试:

pids = os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name)
print type(pids)

#Results
29719
30205
31037
31612
<type 'int'>

为什么pidsint?如何以List处理此结果?

陌生人:

print type(os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name))

什么都没有。不是我的控制台上写的任何类型..

2 个答案:

答案 0 :(得分:6)

os.system不捕获它运行的命令的输出。为此,您需要使用subprocess

from subprocess import check_output

out = check_output("your command goes here", shell=true)

以上内容适用于Python 2.7。对于较老的蟒蛇,请使用:

import subprocess
p = subprocess.Popen("your command goes here", stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()

答案 1 :(得分:0)

os module documentation

  

<强>使用os.system(命令)

     

在子shell中执行命令(字符串)。这是通过调用标准C函数系统()来实现的,并且具有相同的限制。对sys.stdin等的更改不会反映在已执行命令的环境中。

     

在Unix上,返回值是以wait()指定的格式编码的进程的退出状态。请注意,POSIX没有指定C system()函数的返回值的含义,因此Python函数的返回值取决于系统。

如果您想要访问该命令的输出,请改用subprocess module,例如check_output

  

subprocess.check_output(args,*,stdin = None,stderr = None,shell = False,universal_newlines = False)

     

使用参数运行命令并将其输出作为字节字符串返回。