我在cmd.exe(Win 7)上成功运行了以下svn命令:
svn info "svn://azsvn/..some path"
然而,通过Python运行以下代码:
path = 'svn://azsvn/..some path'
cmd_str = 'svn info ' + path
proc = subprocess.Popen(cmd_string, shell=True)
out, err = proc.communicate()
返回空。 我做错了什么?
sedy
答案 0 :(得分:1)
你只需要将stdout和stderr设置为PIPE,如下所示:
proc = subprocess.Popen(cmd_string, shell=True,
stdout=subprocess.PIPE, stderr= subprocess.PIPE)
通过这种方式,communication()方法将返回预期的元组。
答案 1 :(得分:0)
我想,当你从shell运行命令时,shell正在剥离" pth"并传入shell处理过的命令
svn info pth
但是当你使用API库时,他们试图尽可能地接近你传递给库的参数,所以当它被执行时它会运行像
这样的东西。 svn info "pth"
在实际的SVN处理器中。这可能存在SVN不知道像"pth"
这样的文件并且失败的问题。
我尝试svn info pth
的cmd_str,看看我是否达到了预期的效果。此外,您可能会发现在svn info \"pth\"
的shell中运行命令可能会以类似于Python启动的方式失败。