文件名,目录名或卷标语法不正确

时间:2014-05-13 06:13:28

标签: python svn out

我有一个简单的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])

然后它将成功执行数组(命令)的第一个元素,但随后将在第二个(注释)失败。有谁知道什么是错的?

2 个答案:

答案 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