我目前正在尝试使用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
可以看出,它只是在短时间内继续前进。我不知道为什么会这样做。您是否知道如何确保在我的其余代码进展之前传输整个文件?
答案 0 :(得分:0)
我也遇到过这个问题。我想你应该等待
pexpect.expect('100%')
可能超时。 sftp似乎有异步命令行界面,因此它会在传输继续时立即返回到提示符。超时在这里或多或少相关,因为文件被截断,因为脚本在下载仍在进行/待处理时退出。