1

我打电话

'svn di -revision <revNumber>:HEAD --summarize --xml >>svndiff.xml' 

通过 subprocess.call(),我得到一个错误

svn: E020024: Error resolving case of '>>svndiff.xml'

如果我在终端中输入相同的命令,它工作正常。哪里有陷阱?

4

1 回答 1

1

在终端中,>>svndiff.xml由 shell 解释。在默认模式下使用subprocess.call时,这样的参数会按字面意思传递给svn进程。(您没有显示实际的subprocess.call调用,但鉴于错误消息,这是最有可能的诊断。)

相反,您必须使用stderr关键字参数来提供合适的输出。例如:

with open('svndiff.xml', 'a') as log:
    subprocess.call(["svn", "di", "--revision", "%s:head" % rev_number,
                     "--summarize", "--xml"], stdout=log)

或者,您可以使用shell=True让外壳为您执行此操作(具有外壳解析的常见缺陷,例如包含空格的文件名和外壳注入问题):

subprocess.call("svn di --revision %s:HEAD --summarize --xml >>svndiff.xml" % rev_number,
                shell=True)
于 2013-06-26T10:12:32.560 回答