我试图编写一个python脚本,通过scp将文件从远程服务器复制到本地目录。在
除了在pc机上运行ssh-opener命令外,我只能通过ssh-opener命令在pc机上安装这个文件系统操作系统. 在
SCPCopy = "scp -c blowfish -C user@host:\"" + pipes.quote(file) + "\" /storage/downloads/incoming/"
SCPCopy = SCPCopy.replace('\n','')
os.system(SCPCopy)
除了包含撇号的文件名之外,这是有效的。在
下面是传递给操作系统在带有撇号的文件中:
^{pr2}$错误是:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
它看起来管道.报价(x) 正在转义撇号(应该如此),但显然语法仍然不正确。我试过放弃管道.报价(x) 把撇号换成/'但那也没什么用。在
由于
scp
基于SSH
,所以您给它的文件名也要在远程端进行shell转义。所以你需要逃跑两次。在shell的转义命令行正确:
要生成python字符串,我们必须再添加一个转义级别。为了保持理智,我们可以使用三重引号:
^{pr2}$如果您是以编程方式(例如,使用不推荐使用的
pipes.quote
),那么根本不要碰文件名(在上面的例子中,您在文件名周围添加了撇号)。在这显然令人困惑。对于一个简单的模型,
pipes.quote
的全部意义是转义输入,这样shell将把输入解析为一个单词,它等于输入。在以下是一种更普遍正确的方法(并产生相同的结果):
它更清楚地表达了它的意图:控制shell将准确地解析哪些单词。在
但为什么首先从一个贝壳开始呢?我们不需要一个,可以拯救当地的逃犯。要使用我们的参数直接生成一个进程,请使用
os.exec*
家族中的命令。在相关问题 更多 >
编程相关推荐