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