Python 在SFTP中无法识别上载的文件
我使用pysftp上传一个本地文件,该文件经过远程处理,然后返回到SFTP,在那里我可以下载它。目前,我无法让代码识别已处理的远程文件已上载。尽管远程处理的文件已成功上载,但代码仍将永远等待 当代码运行时,如果我刷新诸如FileZilla之类的服务上的连接,代码会立即识别文件所在的位置,并且工作正常。但是,我需要它在不手动刷新FileZilla的情况下工作。我不知道为什么代码不能识别自己,文件已经上传并准备下载 我已经尝试过使用while语句断开连接,然后重新连接到SFTP,但没有成功Python 在SFTP中无法识别上载的文件,python,sftp,pysftp,Python,Sftp,Pysftp,我使用pysftp上传一个本地文件,该文件经过远程处理,然后返回到SFTP,在那里我可以下载它。目前,我无法让代码识别已处理的远程文件已上载。尽管远程处理的文件已成功上载,但代码仍将永远等待 当代码运行时,如果我刷新诸如FileZilla之类的服务上的连接,代码会立即识别文件所在的位置,并且工作正常。但是,我需要它在不手动刷新FileZilla的情况下工作。我不知道为什么代码不能识别自己,文件已经上传并准备下载 我已经尝试过使用while语句断开连接,然后重新连接到SFTP,但没有成功 impo
import pysftp
import stat
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
srv = pysftp.Connection(host="host", username="username", password="passowrd", cnopts=cnopts)
print("Connection Made!")
# Put File In
srv.chdir(r'/path_to_remote_directory')
srv.put(r'C:\Path_to_local_file.csv')
print("File Uploaded")
while not srv.isfile(r'/Path_to_newly_uploaded_remote_file.csv'):
time.sleep(3)
print("Still Waiting")
if srv.isfile(r'/Path_to_newly_uploaded_remote_file.csv'):
print("File is Ready!")
srv.get('/Path_to_newly_uploaded_remote_file.csv', r'C:\Local_path_save_to/file.csv')
# Closes the connection
srv.close()
只需删除
/
:
srv.isfile(r'/Path\u到新上传的远程文件.csv'):
->
srv.isfile(新上传的远程文件的路径:
注:
不要设置cnopts.hostkeys=None,
除非你不关心安全。你失去了一种保护
中间人通过这样做进行攻击
我已经在我的系统中实现了自动添加密钥
auto\u add\u key
如果auto\u add\u key=True,则将密钥添加到known\u hosts
一旦在known_hosts
中存在主机的密钥,将检查此密钥
请参阅->关于安全问题
:
编辑:
用我的代码检查,问题出在/
。。。请检查文件的拼写,并确保您的工作目录正确getcwd()
_
导入pysftp
进口统计
导入时间
cnopts=pysftp.cnopts()
cnopts.hostkeys=None#不要这样做!!!
srv=pysftp.Connection(“主机”,username=“用户”,password=“通过”,cnopts=cnopts)
打印(“建立连接!”)
#放入文件
srv.chdir(r'/upload')
srv.put(r'C:\Users\Fabian\Desktop\SFTP\testcsv.csv')
打印(“上传文件”)
打印(srv.getcwd())#获取当前文件夹 找到了一个有效的解决方案。我认为这是由缓存旧目录引起的。通过每次指向新目录进行更新,它似乎可以工作。现在是显而易见的解决办法,但花了我一段时间。以防其他人遇到此问题
while not srv.isfile(r'/Path_to_newly_uploaded_remote_file.csv'):
time.sleep(3)
srv.chdir(r'/Path_to_newly_uploaded_remote_file')
print("Still Waiting")
尝试按建议删除/但无效。即使我在FileZilla中刷新了SFTP,它实际上也阻止了代码工作。为了澄清,当我手动刷新目录时,原始代码非常有效,只是如果不这样做,它将无法识别文件已上载。@DavidSeroy如果您的路径真的如您的问题所示,那么这个答案是有意义的。如果不是,那么您应该编辑问题以显示更多相关的路径占位符,以免混淆我们。/path\u to\u remote\u目录
与/path\u to\u新上传的\u remote\u file.csv
之间的关系是什么?您的SFTP服务器是什么?向我们展示。如果您使用listdir
而不是stat
来测试文件是否存在,该怎么办?
import pysftp
import stat
import time
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None #do not do this !!!
srv = pysftp.Connection("host", username="user", password="pass", cnopts=cnopts)
print("Connection Made!")
# Put File In
srv.chdir(r'/upload')
srv.put(r'C:\Users\Fabian\Desktop\SFTP\testcsv.csv')
print("File Uploaded")
print(srv.getcwd()) #get the current folder ! <- you should looking here
while not srv.isfile(r'testcsv.csv'):
time.sleep(3)
print("Still Waiting")
if srv.isfile(r'testcsv.csv'):
print("File is Ready!")
srv.get('testcsv.csv', r'C:\Users\Fabian\Desktop\SFTP\testcsv_new.csv')
# Closes the connection
srv.close()
while not srv.isfile(r'/Path_to_newly_uploaded_remote_file.csv'):
time.sleep(3)
srv.chdir(r'/Path_to_newly_uploaded_remote_file')
print("Still Waiting")