1
我想使用pexpect模塊來SFTP文件。使用pexpect python模塊的SFTP
sftp_opts = ['-o', 'Port=%s' % port,
'-o', 'UserKnownHostsFile=%s' % known_hosts_file,
'-o', 'PasswordAuthentication=yes',
'%[email protected]%s' % (user, host)]
p = pexpect.spawn('sftp', sftp_opts)
try:
p.expect('(?i)password:')
x = p.sendline(password)
x = p.expect('sftp>')
x = p.sendline('cd ' + remote_dir)
x = p.expect('sftp>')
x = p.sendline('put ' + filename)
x = p.expect('sftp>')
x = p.isalive()
x = p.close()
retval = p.exitstatus
except pexpect.EOF:
print('SFTP file transfer failed due to premature end of file.')
return False
except pexpect.TIMEOUT:
print('SFTP file transfer failed due to timeout.')
return False
它看起來像我能夠連接&得到驗證通SSH,但RETVAL始終爲1(退出狀態)和文件犯規得到sftp'ed。
我在這裏錯過了什麼嗎?
如果我嘗試等待p(p.wait()而不是p.close()) - 它永遠不會返回。
[paramiko](http://www.lag.net/paramiko/)支持[SFTP](http://www.lag.net/paramiko/docs/paramiko.SFTP-class。 HTML)。 – ephemient
@ephemient - paramiko比pexpect更好的選擇嗎? – user1082044
你可以使用SSH公鑰與scp,這不需要pexepect。 – jordanm