IOError: [Errno 2] No such file - Paramiko put()
J'upload un fichier via SFTP en utilisant Paramiko avec sftp.put(localFile, remoteFile)
. Je fais le nécessaire répertoire d'abord, si besoin est, avec
makeCommand = 'mkdir -p "' + remotePath + '"'
ssh.exec_command(makeCommand)
cela a fonctionne parfois, mais je suis parfois obtenir l'erreur suivante:
sftp.put(localFile, remoteFile)
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 565, in put
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 245, in open
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 635, in _request
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 682, in _read_response
File "build/bdist.macosx-10.8-intel/egg/paramiko/sftp_client.py", line 708, in _convert_status
IOError: [Errno 2] No such file
malgré le fait que le fichier existe certainement (et localFile
est le chemin correct) et le chemin d'accès à distance est faite.
Il y a des discussions ici et ici sur un problème similaire, mais aucun des points soulevés il m'ont aidé. Mon serveur prend en charge la df -hi
de commande.
Quelqu'un a des conseils sur ce produit ou d'une solution possible?
MODIFIER
Après les suggestions ci-dessous j'ai essayé de changer le répertoire de travail avec sftp.chdir(remoteDirectory)
mais cet appel a produit exactement la même erreur que ci-dessus. Il semble donc que ce n'est pas seulement un problème de téléchargement. Des idées?
OriginalL'auteur Cian | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Il semble être un dossier distant problème d'autorisation. Bien que le dossier distant a été faite avant que le fichier a été téléchargé, il semble que les autorisations sur le dossier ont été prévention du téléchargement.
Le problème est lié à cette question - si je fais ouvrir les autorisations sur le dossier, je vais faire du téléchargement avant de télécharger, le programme peut télécharger amende. Bien que, pour un problème de permission, je devrais être en train de
IOError: [Errno 13] Permission denied
, depuis que j'ai fait les changements que je n'ai pas rencontré des erreurs.Je ne suis pas sûr si c'est la réponse du serveur est de donner Paramiko qui est le problème, ou un bug dans Paramiko lui-même qui est à l'origine de
IOError: [Errno 2] No such file
au lieu d'unErrno 13
, mais cela semble avoir résolu le problème.OriginalL'auteur Cian
La
IOError
est local, donc (pour quelque raison que ce soit), il semble que votre local python ne peut pas trouverlocalFile
. La vérification de sécurité avant l'appel peut aider à localiser le problème:Si vous êtes positif que
localFile
n'existe pas, alors ce pourrait être simplement un problème de chemin d'accès - estlocalFile
sur un chemin relatif ou absolu? De toute façon, leif
instruction au-dessus de l'attraper.MODIFIER
Suivi par le biais de la paramiko fichiers montre que la ligne 245 de
sftp_client.py
(celui de jeter l'exception) est en faitqui est tout à fait trompeur comme paramiko jette un
IOError
d'un fichier distant! Ma meilleure supposition est que, actuellement,remoteFile
est soit un manque d'annuaire ou un répertoire que vous n'avez pas accès.D'intérêt, pouvez-vous énumérer la distance dir
pour vérifier que c'est là (ou peut-être qu'il est là et vous pouvez lui écrire)?
Scratch, c'était une coïncidence, il a travaillé. Les téléchargements ont été travaillant pour environ une heure, et maintenant j'ai la même erreur. Même si j'ai vérifier le fichier existe et qu'elle peut ouvrir le fichier, j'obtiens l'erreur ci-dessus lorsque vous essayez de télécharger?
Bonjour, merci pour la modifier. Ya je peux lister le répertoire distant, et j'ai ca y accéder. J'ai eu une supposition que peut-être Paramiko m'attendais à un fichier à l'emplacement distant? Donc j'essaye un 'touch <fichier distant, remotefile>' l'aide de
ssh.exec_command()
de faire un fichier vide en premier. Étrangement mon application va télécharger amende pour un certain temps, au hasard, puis arrêter de travailler avec l'erreur à nouveau.Étrangement, même
sftp.listdir()
est de lancer le même message d'erreur maintenant, même si je le répertoire d'abord, pour être sûr qu'il existe?OriginalL'auteur danodonovan
Êtes-vous sûr que le répertoire a été créé et il est de votre télécommande répertoire de travail?
Paramiko a ses propres méthodes pour créer de nouveaux répertoires et la navigation dans le système de fichiers distant. Envisagez d'utiliser quelque chose comme:
chdir
si vous passer tout le chemin vers le fichier. Les téléchargements sont de travail en ce moment, depuis que j'ai introduit une nouvelle tentative ettouch
, mais comme une sauvegarde, pourchdir
et placez ensuite le fichier pourrait être une option. Pourrait mettre en œuvre la présente comme une solution de repli si l'erreur survient à partir de la première tentative.J'ai essayé ce que vous avez suggéré, et étrangement
sftp.chdir()
produit la même erreur. Voir mon montage ci-dessus.Pouvez-vous confirmer que le répertoire que vous tentez d'écrire ou chdir en existe déjà. Aussi, vérifiez pour voir si il y a quelque chose dans syslog qui peuvent vous être utiles.
Oui, à certains il ne. Comme je l'ai mentionné ci-dessus, je peux même l'utiliser
touch
pour créer un fichier à cet emplacement.OriginalL'auteur Brian