gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:43 26 4
gpt4 key购买 nike

我打电话

'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 让 shell 为您完成此操作(存在 shell 解析的常见陷阱,例如包含空格的文件名问题和 shell 注入(inject)问题):

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

关于Python 调用 svn di 时的 call() 行为不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17316597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com