我有一个简单的python(2.7)脚本,应该执行几个svn命令:
def getStatusOutput(cmd):
print cmd
p = subprocess.Popen([cmd],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output, status = p.communicate()
return status, output
svn_cmd = [
["svn co " + FIRMWARE_URL + "/branches/interfaces/ interfaces --depth empty", ""],
["svn up interfaces/actual_ver.txt", " Getting current version of a branch "]
]
status, output = getStatusOutput(svn_cmd[0][0])
不幸的是,当它在我的朋友计算机上运行时,它会失败并显示错误:“文件名,目录名或卷标语法不正确。” 当我在我的机器上运行它时它工作正常。
如果我改变:
status, output = getStatusOutput(svn_cmd[0][0])
到
status, output = getStatusOutput(svn_cmd[0])
然后它将成功执行数组(命令)的第一个元素,但随后将在第二个(注释)失败。有谁知道什么是错的?
答案 0 :(得分:2)
我认为解决方案更容易。问题在这里:
p = subprocess.Popen([cmd],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
且确切[cmd]
应该没有[]。否则,元素将被视为数组而不是字符串。
希望这会对某人有所帮助。
答案 1 :(得分:0)
我有一个类似的代码,可以在Linux上执行但在Windows上执行
如果我使用shlex.split()
,它会起作用import shlex
CMD="your command"
cmdList=shlex.split(CMD)
proc = subprocess.Popen(cmdList,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True
(out, err) = proc.communicate()
print err