调用svn di时Python不正确的call()行为

时间:2013-06-26 09:40:34

标签: python svn subprocess

我打电话

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

通过subprocess.call(),我收到错误

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

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

1 个答案:

答案 0 :(得分: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让shell为您执行此操作(通常存在shell解析的缺陷,例如文件名包含空格和shell注入的问题):

subprocess.call("svn di --revision %s:HEAD --summarize --xml >>svndiff.xml" % rev_number,
                shell=True)