0

我知道对你们中的许多人来说这很容易,但对我来说不是。所以我试图从shell输出数据,但是当我必须将它转换为字符串时我被卡住了。我试过了for,但没有用。所以基本上,我正在尝试的是:对于我的 shell 中的每个新行,输出新行。我举个例子——free -m命令。它的输出是

  total       used       free     shared    buffers     cached
  Mem:           144        512        111          0          0        121
  -/+ buffers/cache:         23        232
  Swap:            0          0          0

所以,到目前为止我写的是:

import commands
foo...
sout = commands.getstatusoutput(inp)
    return ' '.join(str(line) for line in sout)
foo...

但输出只有一行(第一行 - 总计、已使用、免费、共享等)

我希望每个新行都有新行,就像 shell 中的输出一样。如果我离开它没有 .join 它输出类似

(0, '             total       used       free     shared    buffers     cached\nMem:           512        144        368          0          0        121\n-/+ buffers/cache:         21        234\nSwap:            0          0          0')

由于我希望它是一个字符串,我什至尝试过'\n'.join,但它只输出0(wtf)。有任何想法吗?

4

4 回答 4

1

您也可以使用更方便的 os.popen。

print os.popen('free -m').read()

您可能希望阅读此线程以全面了解可用于从 python 中运行 shell 命令的选项 在 Python中调用外部命令

于 2013-01-27T17:37:31.227 回答
0

整个字符串都在元组中,带有换行符和所有内容,所以我想你需要做的就是:

print sout[1]

假设这sout是您在问题中显示的元组:

(0, '             total       used       free     shared    buffers     cached\nMem:           512        144        368          0          0        121\n-/+ buffers/cache:         21        234\nSwap:            0          0          0')
于 2013-01-27T17:31:44.957 回答
0

只需检查换行符,然后在输出中插入换行符。实际上你在这里得到了一个整体的输入。希望能帮助到你

于 2013-01-27T17:41:21.513 回答
0

还有另一种方法可以获得相同的结果:

    from subprocess import Popen, PIPE
    // Create a subprocess and then interact with the process by reading data from 
    // stdout, untill the end-of-file is reached. Since communicate return tuple 
    // in the form of stdout, stderr), Capture only the output.

    (result, errcode) = Popen('free -m', stdout = PIPE, shell = True).communicate()
    print result
于 2013-01-27T18:00:10.920 回答