2015-04-21 14 views
5

Tôi đang cố sao chép vài tệp từ thư mục cửa sổ cục bộ của tôi sang thư mục linux từ xa.Lỗi Paramiko: kích thước không phù hợp trong đặt

Làm việc cho tệp có cùng loại tiện ích mở rộng. Nhưng ngắt khi có các phần mở rộng khác nhau trong một thư mục.

Bộ luật:

import os 
import glob 
import paramiko 
glob_pattern='*.*' 
try: 
    ssh.connect(host,username=user,password=pwd) 
    ftp = ssh.open_sftp() 

    try: 
     ftp.mkdir(dir_remote) 
     command=dir_remote+'/setuplog' 
     ftp.mkdir(command) 
     commande=dir_remote+'/emsfolder' 
     ftp.mkdir(commande) 

     try: 
      for fname in glob.glob(uploadfolder + os.sep + glob_pattern): 
       local_file = os.path.join(uploadfolder, fname) 
       remote_file = dir_remote + '/' + os.path.basename(local_file) 
       ftp.put(local_file,remote_file) 
       ftp.chmod(remote_file ,0777) 
     except IOError, e: 
      print (e) 


    except IOError, e: 
      print (e) 


except paramiko.AuthenticationException, ae: 
    print (ae) 
finally: 
    ssh.close() 

Tôi đã cố gắng để chuyển 2 file duy nhất (1.sh và 2.pl). Trong khi 1.sh đã sao chép một tập tin 2.pl 0 byte được tạo ra tại các máy chủ từ xa và sau đó tôi nhận được lỗi:

size mismatch in put! 0 != 2200 

Tôi đang sử dụng:

python 2.7, Paramiko - 1.15.2 

Vui lòng giúp đỡ.

+1

bạn đã giải quyết nó? Tôi có vấn đề tương tự khi sao chép tập tin với phần mở rộng khác nhau. –

Trả lời

6

Tôi nghi ngờ việc này có liên quan đến các tiện ích mở rộng khác nhau trong một thư mục. Các mã trong paramiko của sftp_client.py:putfo() đọc ở cuối:

s = self.stat(remotepath) 
    if s.st_size != size: 
     raise IOError('size mismatch in put! %d != %d' % (s.st_size, size)) 

Tôi đã có một vấn đề tương tự và nó bật ra rằng hệ thống tập tin từ xa là đầy đủ và do đó paramiko không thể viết/đặt các tập tin.

BTW, thay vì uploadfolder + os.sep + glob_pattern (và tương tự), bạn có thể sử dụng os.path.join(uploadfolder, glob_pattern)

Các vấn đề liên quan