J'essaye de SFTP un fichier en utilisant le module pexpect.SFTP utilisant le module pexpect python
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
On dirait que je suis capable de se connecter & s'authentifier à travers SSH, mais le retval est toujours 1 (état de sortie) et le fichier ne marche pas se sftp'ed.
Ai-je oublié quelque chose ici?
Si j'essaie d'attendre p (p.wait() au lieu de p.close()) - il ne revient jamais.
[paramiko] (http://www.lag.net/paramiko/) supporte [SFTP] (http://www.lag.net/paramiko/docs/paramiko.SFTP-class. html). – ephemient
@ ephemient - est-ce que paramiko est une meilleure option que pexpect? – user1082044
Vous pouvez utiliser une clé publique SSH avec scp, qui ne nécessite pas de pexepect. – jordanm