运行命令时键入错误

时间:2013-12-16 23:11:52

标签: python

我在运行下面的脚本时遇到以下错误,可以帮助确定问题是什么以及如何克服它

代码: -

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

2 个答案:

答案 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():

您正在尝试使用文件描述符进行迭代,而不是文件本身的内容。