Linux命令行调用os.system未返回预期结果?

58 投票
10 回答
312213 浏览
提问于 2025-04-16 04:34

我需要在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

撰写回答