Python:迭代shell命令结果的好方法

Sch*_*tod 4 python shell command exec

是否有一种"好的"方法来迭代shell命令的输出?

我正在寻找类似以下内容的python:

ls | while read file; do
    echo $file
done
Run Code Online (Sandbox Code Playgroud)

请注意,'ls'只是shell命令的一个示例,它将返回多个行的结果,因为'echo'只是:用它做一些事情.

我知道这些替代方案:在Python中调用外部命令但我不知道使用哪一个或者是否有一个"更好"的解决方案.(事实上​​,"更好"是这个问题的主要焦点.)

这是用python替换一些bash脚本.

beh*_*uri 11

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

import os

with os.popen('ls') as pipe:
    for line in pipe:
        print (line.strip())
Run Code Online (Sandbox Code Playgroud)

就像在文档中一样,这种语法被折旧并被更复杂的替换 subprocess.Popen

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

for line in pipe.stdout:
    print(line.strip())
Run Code Online (Sandbox Code Playgroud)

  • @JFSebastian`shell=True` 的必要性取决于 OP 应该替换的 bash 脚本;对于`ls ~`这样简单的命令,需要传入`shell=True` (2认同)