Python 3迭代文件内容并将每一行传递给Popen语句

时间:2016-05-16 23:39:44

标签: python bash python-3.5

我是Python的新手,目前正在将我创建的bash脚本转换为Python,因为bash不是正确的工具。

我试图读取文件,遍历文件中的每一行,然后将每一行作为变量传递给Popen命令。

from subprocess import Popen, PIPE
lr = open(customoverridefile)
for line in lr.readlines():
    # print(line, end='')
    proc = Popen('autopkg repo-update {}'.format(line), stdout=PIPE, stderr=PIPE, shell=True)
    (out, err) = proc.communicate()
    print(out)

此代码的结果是:

b''
b''
b''
b''
b''
b''

Process finished with exit code 0

我无法弄清楚如何将line变量传递给autopkg repo-update <line>中的Popen命令。我将注释掉的print (line, end='')留在那里因为我能够遍历文件并简单地打印其内容。

编辑(为清晰起见):所以我的问题是 - 如何在整个循环中管道变量line以便命令运行并且输出显示在终端中?

更新:
我想通了,感谢这里评论的帮助。每行都附加了UNIX行返回\n - 我通过在universal_newlines=True命令中添加Popen来解决此问题:

lr = open(overridesfile)
for line in lr.readlines():
    proc = Popen('autopkg make-override {}'.format(line), stdout=PIPE, stderr=PIPE, shell=True, universal_newlines=True)
    (out, err) = proc.communicate()
    print(out, err, end='')

感谢您的提示&amp;帮助 - 很高兴这并不像我开始期待的那么复杂!

最终更新:
我找到了一个完全根据需要格式化项目的解决方案。使用上面的代码时,项目将输出(并且没有正确处理),如下所示:
['list item 1', 'list item 2', 'list item 3', ...]
我发现我无法使用它,但是我在this StackOverflow帖子中找到了我的解决方案。

with open(overridesfile, 'r') as f:
    for line in f:
        overrideslist = line
        print(overrideslist, end='')

再一次,希望这有助于将来的某些人。干杯!

0 个答案:

没有答案