我是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='')
再一次,希望这有助于将来的某些人。干杯!