我打电话
'svn di -revision <revNumber>:HEAD --summarize --xml >>svndiff.xml'
通过subprocess.call(),我收到错误
svn: E020024: Error resolving case of '>>svndiff.xml'
如果我在终端中键入相同的命令,它可以正常工作。 陷阱在哪里?
答案 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)