【问题标题】:Python: Nice way to iterate over shell command resultPython:迭代 shell 命令结果的好方法
【发布时间】:2013-12-21 17:51:07
【问题描述】:

是否有一种“好”的方式来迭代 shell 命令的输出?

我正在寻找类似的 python 等价物:

ls | while read file; do
    echo $file
done

请注意,'ls' 只是 shell 命令的一个示例,它会在多行中返回它的结果,原因 'echo' 只是:用它做点什么。

我知道这些替代方案:Calling an external command in Python,但我不知道要使用哪一个,或者是否有“更好”的解决方案。 (其实“更好”是这个问题的主要焦点。)

这是为了用 python 替换一些 bash 脚本。

【问题讨论】:

标签: python shell command exec


【解决方案1】:

你可以打开一个管道(见doc):

import os

with os.popen('ls') as pipe:
    for line in pipe:
        print (line.strip())

如文档中所述,该语法已被弃用,取而代之的是更复杂的subprocess.Popen

from subprocess import Popen, PIPE
pipe = Popen('ls', shell=True, stdout=PIPE)

for line in pipe.stdout:
    print(line.strip())

【讨论】:

  • 删除shell=True。这里没有必要。
  • @J.F.Sebastian shell=True 的必要性取决于 OP 应该替换的 bash 脚本;对于像ls ~这样简单的命令,需要通过shell=True
【解决方案2】:

check_output 会给你一个你可以解析的字符串。 call 将简单地重新使用您现有的 stdout/stderr/stdin 并简单地返回进程退出代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2018-12-10
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多