在Python 2.7中编码时如何处理Linux上的空格路径?

时间:2016-01-20 16:30:58

标签: linux python-2.7

我有一个python脚本,用于处理Linux Mint上目录中的文件。部分代码如下:

path_to_dir = "/home/user/Im a folder with libs to install/"

if os.path.isdir(path_to_dir):
    print "it can locate the directory"
    os.chdir(path_to_dir) # everything ok here :D
    subprocess.call(['./configure'], shell = True)
    subprocess.call(['make'], shell = True)
    subprocess.call(['make install'], shell = True) # problem happens here

执行subprocess.call(['make install'], shell = True)时会抛出此错误:

/bin/bash: /home/user/Im: No such file or directory
make[3]: *** [install-libLTLIBRARIES] Error 127
make[2]: *** [install-am] Error 2
make[1]: *** [install-recursive] Error 1
make: *** [install-recursive] Error 1

执行subprocess.call(['make install'], shell = True)时如何处理路径中的空格? (我使用的是Python 2.7)

编辑:我发现了错误的来源:我使用的库(从互联网上的某个地方下载)的Makefile不支持路径中的空格。

我在路径" / home / user / Im中使用此代码测试了此处给出的答案,其中包含要安装libs的文件夹/"并使用root帐户:

./configure
make
make install /home/user/Im\ a\ folder\ with\ libs\ to\ install/Makefile

它给了我同样的错误:

/bin/bash: /home/user/Im: No such file or directory
[install-libLTLIBRARIES] Error 127
make[3]: se sale del directorio «/home/user/Im a folder with libs to install/»
make[2]: *** [install-am] Error 2
make[2]: se sale del directorio «/home/user/Im a folder with libs to install/»
make[1]: *** [install-recursive] Error 1
make[1]: se sale del directorio «/home/user/Im a folder with libs to install/»
make: *** [install-recursive] Error 1

它可以找到该文件夹​​,但似乎在内部,它将路径传递给没有scape字符的Linux bash。

我接受nafas作为答案,因为他帮助我找到了问题的根源。

3 个答案:

答案 0 :(得分:1)

使用\

跳过空格

e.g。 :

Im\ a\ folder\ with\ libs\ to\ install

答案 1 :(得分:0)

您应该可以使用转义版本替换空格。 尝试:

path_to_dir = path_to_dir.replace(" ", "\\ ")

答案 2 :(得分:0)

另外,请考虑替换字符串中所有不允许的特殊字符,例如'&','<','>','|','*','?'等,这在文件名中是不允许的,并且必须逃脱了

path_to_dir = path_to_dir.replace(" ", "\\ ").replace("?", "\\?").replace("&", "\\&").replace("(", "\\(").replace(")", "\\)").replace("*", "\\*").replace("<", "\\<").replace(">", "\\>")