Python scp 将图像从 image_urls 复制到服务器

Python scp copy images from image_urls to server

我写了一个接收 url 并将其复制到所有服务器的函数。 服务器远程路径存储在 db.

def copy_image_to_server(image_url):

  server_list = ServerData.objects.values_list('remote_path', flat=True).filter(active=1)
  file = cStringIO.StringIO(urllib.urlopen(image_url).read())
  image_file = Image.open(file)
  image_file.seek(0)

  for remote_path in server_list:
    os.system("scp -i ~/.ssh/haptik  %s %s " % (image_file, remote_path))

我在最后一行收到这个错误 cannot open PIL.JpegImagePlugin.JpegImageFile: No such file

请告诉我代码有什么问题,我检查过url没有损坏

问题是 image_file 不是路径(字符串),它是一个对象。您的 os.system 调用正在构建一个需要路径的字符串。

您需要先将文件写入磁盘(可能使用 tempfile 模块),然后才能以这种方式将其传递给 scp

事实上,您根本不需要(至少您在代码片段中所做的)将其转换为 PIL Image 对象,您只需将其写入磁盘一次即可您已检索到它,然后将其传递给 scp 以移动它:

file = cStringIO.StringIO(urllib.urlopen(image_url).read())
diskfile = tempfile.NamedTemporaryFile(delete=False)
diskfile.write(file.getvalue())
path = diskfile.name
diskfile.close()
for remote_path in server_list:
    os.system("scp -i ~/.ssh/haptik  %s %s " % (path, remote_path))

您应该在使用完该文件后将其删除。