我在运行下面的脚本时遇到以下错误,可以帮助确定问题是什么以及如何克服它
代码: -
import sys
import os
def main ():
to = ''
with open('caf_gerrits.txt','r') as f :
for gerrit in f :
print "Gerrit " + gerrit
cmd = "ssh -p 29418 review-android.company.com gerrit query --format=JSON --current-patch-set --commit-message --files \'%s\' >> gerrit_output.txt" %(gerrit)
os.system(cmd)
if __name__ == '__main__':
main()
错误: -
Gerrit 530731
Traceback (most recent call last):
File "test.py", line 14, in <module>
cmd = "ssh -p 29418 review-android.company.com gerrit query --format=JSON --current-patch-set --commit-message --files \'%s\' >> gerrit_output.txt" %(gerrit)
File "test.py", line 10, in main
to = ''
TypeError: must be string without null bytes, not str
答案 0 :(得分:0)
问题是在我下注的文件之后转义的单引号。因为你在外面使用双引号,所以没有必要逃避它们。
使用&#39;子流程&#39;的替代解决方案模块看起来像下面这样。请注意,这只是输入,我还没有运行它。它应该很接近。
def main ():
to = ''
ssh_command = ["ssh", "-p", 29418, "review-android.company.com", "gerrit",
"query", "--format", "JSON", "--current-patch-set",
"--commit-message", "--files", ]
with open('gerrit_output.txt', 'a') as fp:
with open('caf_gerrits.txt','r') as f :
for gerrit in f :
print "Gerrit " + gerrit
result = subprocess.check_output(ssh_command + [gerrit, ])
fp.write(result)
if __name__ == '__main__':
main()
查看&#39;子流程&#39;的文档。模块,还有很多其他方法可以实现这一目标。无论你选择何种方式,你都可以获得更好的错误处理和更好的输出捕获效果,而不是使用简单的“os.system”#39;调用
答案 1 :(得分:-1)
尝试使用:
for gerrit in f.readlines():
您正在尝试使用文件描述符进行迭代,而不是文件本身的内容。