Linux命令行调用os.system未返回预期结果?
我需要在Linux上执行一些命令行操作,并获取返回的结果。不过,下面这种写法只返回了0
,而我期待的是一个时间值,比如00:08:19
。我在普通的命令行中测试了同样的调用,它返回了时间值00:08:19
,所以我很困惑,不知道自己哪里做错了,因为我以为这就是在Python中该怎么做。
import os
retvalue = os.system("ps -p 2993 -o time --no-headers")
print retvalue
10 个回答
10
最简单的方法就是这样:
import os
retvalue = os.popen("ps -p 2993 -o time --no-headers").readlines()
print retvalue
这样会返回一个列表
25
如果你只关心程序的输出,最简单的方法就是用 subprocess 的 check_output 函数:
output = subprocess.check_output(["command", "arg1", "arg2"]);
这样,output 就会保存程序输出的内容。想了解更多信息,可以查看上面的链接。
100
执行这个命令后返回的是它的返回值。而你在直接执行时看到的,是命令在标准输出(stdout)中的结果。返回0意味着执行没有出错。
如果你想捕捉输出,可以使用popen等方法。
可以参考下面这样的代码:
import subprocess as sub
p = sub.Popen(['your command', 'arg1', 'arg2', ...],stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output
或者
import os
p = os.popen('command',"r")
while 1:
line = p.readline()
if not line: break
print line
在StackOverflow上可以查看:Popen和Python