当前位置: 首页 > 知识库问答 >
问题:

Python scp复制文件,文件名中有空格

姚嘉容
2023-03-14

我正在尝试用SCP复制本地网络中的文件。它在没有空格的文件名中工作得很好,但在使用时会崩溃。我试着把“”替换成“\”作为这个例子,但它不起作用。下面是我的代码:

def connection(locals):
         a = (int(re.search(br'(\d+)%$', locals['child'].after).group(1)))
         print a
         perc = (Decimal(a)/100)
         print (type(perc)), perc
         while gtk.events_pending():
             gtk.main_iteration()
         FileCopy.pbar.set_text("Copy of the file in the Pi...   " + str(a) + "%")
         while gtk.events_pending():
             gtk.main_iteration()
         FileCopy.pbar.set_fraction(perc)

file_pc = "/home/guillaume/folder/a very large name of file with space .smthg"
file_pi = "pi@192.168.X.X:/home/pi/folder/a very large name of file with space .smthg"

if " " in file_pc:
   file_pc = fichier_pc.replace(" ", '\\\ ')   # tried '\\ ' or '\ '
   file_pi = fichier_pi.replace(" ", '\\\ ')   # but no way
else:
   pass
command = "scp %s %s" % tuple(map(pipes.quote, [file_pc, file_pi]))
pexpect.run(command, events={r'\d+%': connection}) # this command is using to get the %

如何修复此问题?谢谢

共有1个答案

柯翔
2023-03-14

您可以保持本地文件file_pc原样(pipes.quote将转义空格)。应更改远程文件:

import pipes

file_pi = 'pi@192.168.X.X:/home/pi/folder/file with space.smth'
host, colon, path = file_pi.partition(':')
assert colon
file_pi = host + colon + pipes.quote(path)

例如,user@host:/path/with space应更改为user@host:'/path/with space'

 类似资料:
  • 问题内容: 我正在尝试编写脚本,将大照片裁剪并调整为高清壁纸。 但是该脚本似乎在文件名中带有空格的问题(例如Tumble Weed.jpg)。我怎样才能解决这个问题? 问题答案: 首先,您不需要。通过在backtics中使用,您可以使bash隐式地将字符串解析为一个列表,该列表按空格分隔。而是让bash生成列表并将其分离,而无需进行此类怪癖: 另外,您需要将所有用法都括在引号中,以使bash整体上

  • 我正在创建一个使用 RestAPI 获取数据的应用程序,对于该操作,我使用改造 2、okhttp3 和 Jackson 将 json 解析为对象,我的应用程序还使用 Firebase 云消息传递 当我编译我的代码时,它会给我以下错误 错误:任务执行失败:app:transformresourceswithmergejavarefordebug。 com . Android . build . AP

  • rank ▲ ✰ vote url 50 404 65 510 url 复制文件 怎么在Python里赋值文件?在os下没找到复制的方法. shutil有许多的方法.其中之一就是: copyfile(src, dst) 把src文件的内容复制给dst.目的地址必须是可写的;否则将会出现IOError错误.如果dst已经存在,将会被覆盖.一些像字符或者块设备不能用这个方法赋值.src和dst是路径

  • 你可以使用复制任务( Copy )去复制文件. 复制任务扩展性很强,能够过滤复制文件的内容, 映射文件名. 使用复制任务时需要提供想要复制的源文件和一个目标目录,如果你要指定文件被复制时的转换方式,可以使用 复制规则. 复制规则被 CopySpec 接口抽象,复制任务实现了这个接口. 使用 CopySpec.from() 方法指定源文件.使用 CopySpec.into() 方法指定目标目录. 例

  • 使用Java8。 为了获得最佳性能,我尝试用复制文件,但很快发现它不支持汉字。例如: 代码打算从jar复制一个文件,但它抛出了一个异常(a“我的" 文件夹已提前创建): 问题是鎴戠殑" 甚至连一个中国人都看不懂,所以我正在寻找一个解决办法来处理汉字。 我也尝试了FileChannel,但失败了,意识到它用于直接文件,而不是在一个jar中的文件。我该怎么做?

  • 我创建了一个带方括号的文件,名为< code>[id]。去但我无法建立它。 当我运行< code>go build "[id]时。转到" ,我看到了以下内容: 无法加载包:包主:无效的输入文件名“[id]”。去吧" Go文件名有限制吗?具体来说,什么是不允许的?如果有,请留档。