Python 在SFTP中无法识别上载的文件

Python 在SFTP中无法识别上载的文件,python,sftp,pysftp,Python,Sftp,Pysftp,我使用pysftp上传一个本地文件,该文件经过远程处理,然后返回到SFTP,在那里我可以下载它。目前,我无法让代码识别已处理的远程文件已上载。尽管远程处理的文件已成功上载,但代码仍将永远等待 当代码运行时,如果我刷新诸如FileZilla之类的服务上的连接,代码会立即识别文件所在的位置,并且工作正常。但是,我需要它在不手动刷新FileZilla的情况下工作。我不知道为什么代码不能识别自己,文件已经上传并准备下载 我已经尝试过使用while语句断开连接,然后重新连接到SFTP,但没有成功 impo

我使用pysftp上传一个本地文件,该文件经过远程处理,然后返回到SFTP,在那里我可以下载它。目前,我无法让代码识别已处理的远程文件已上载。尽管远程处理的文件已成功上载,但代码仍将永远等待

当代码运行时,如果我刷新诸如FileZilla之类的服务上的连接,代码会立即识别文件所在的位置,并且工作正常。但是,我需要它在不手动刷新FileZilla的情况下工作。我不知道为什么代码不能识别自己,文件已经上传并准备下载

我已经尝试过使用while语句断开连接,然后重新连接到SFTP,但没有成功

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")