使用pexpect(python)时SFTP未完成文件传输

时间:2015-09-02 22:07:16

标签: python sftp pexpect

我目前正在尝试使用pexpect传输文件。它通常工作正常,但最近它通过不传输整个文件导致问题。它会截断文件传输,或者脚本在完成之前继续运行。

我的代码如下:

job_id = str(job_record['control']['id'])
self.px_ssh.sendline('cd ' + self.remotePath + job_id)
self.px_ssh.prompt()
self.px_ssh.sendline('ls')
self.px_ssh.prompt()
remote_files = self.px_ssh.before.decode('utf-8')
for cop in outfiles:
  if cop in remote_files:
    print('Transferring file _from_ remote cluster:   ' + cop)
    self.px_ftp.sendline('get ' + self.remotePath + job_id + '/' + cop + ' ' + os.getcwd())
    self.px_ftp.expect('sftp>', timeout=None)

日志文件:

get path/QMCDB/Elemental/As/As_QMC_2x2x2/prop.in.o    path/Documents/Research/QMCDB/Runs/Elemental/As/As_QMC_2x2x2
Connected to taub.campuscluster.illinois.edu.
sftp> get path/QMCDB/Elemental/As/As_QMC_2x2x2/prop.in.o path/Documents/Research/QMCDB/Runs/Elemental/As/As_QMC_2x2x2
Fetching path/QMCDB/Elemental/As/As_QMC_2x2x2/prop.in.o to path/Documents/Research/QMCDB/Runs/Elemental/As/As_QMC_2x2x2/prop.in.o

path/QMCDB/Elemental/As/As_   0%    0     0.0KB/s   --:-- ETA
path/QMCDB/Elemental/As/As_   0%   11MB  11.1MB/s   02:32 ETA
path/QMCDB/Elemental/As/As_   1%   22MB  11.1MB/s   02:31 ETA

可以看出,它只是在短时间内继续前进。我不知道为什么会这样做。您是否知道如何确保在我的其余代码进展之前传输整个文件?

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。我想你应该等待

pexpect.expect('100%')

可能超时。 sftp似乎有异步命令行界面,因此它会在传输继续时立即返回到提示符。超时在这里或多或少相关,因为文件被截断,因为脚本在下载仍在进行/待处理时退出。