【发布时间】:2012-11-26 21:25:23
【问题描述】:
我正在尝试编写一个 python 脚本来通过 scp 将文件从远程服务器复制到本地目录。
因为我在 OpenELEC 发行版上运行它(最小的 HTPC linux 发行版,只读文件系统除了 userhome 使得安装 python ssh 模块不切实际),我这样做很丑陋,只是将文件名传递给 scp通过 os.system 命令。
SCPCopy = "scp -c blowfish -C user@host:\"" + pipes.quote(file) + "\" /storage/downloads/incoming/"
SCPCopy = SCPCopy.replace('\n','')
os.system(SCPCopy)
这有效,但包含撇号的文件名除外。
以下是在带有撇号的文件中传递给 os.system 的示例:
scp -c blowfish -C user@host:"'/media/sdi1/home/data/bob'"'"'s file.avi'" /storage/downloads/incoming/
还有错误:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
看起来 pipe.quote(x) 正在转义撇号(应该如此),但显然语法仍然不正确。我已经尝试过放弃 pipe.quote(x) 并用 /' 替换撇号,但这也没有让我得到任何结果。
【问题讨论】:
-
Python 文档说
pipes.quote自 1.6 版起已弃用! -
我试过不使用pipes.quote,而是像这样替换撇号:SCPCopy = SCPCopy.replace("'", "\'") 但是,我得到了同样的错误。
-
使用
shlex.quote,不要使用你自己的\"。 -
或者您可以重命名您的文件以不使用撇号。祝你好运。