Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ftplib msld错误:未理解500命令_Python_Windows_Iis_Ftp_Ftplib - Fatal编程技术网

Python ftplib msld错误:未理解500命令

Python ftplib msld错误:未理解500命令,python,windows,iis,ftp,ftplib,Python,Windows,Iis,Ftp,Ftplib,我正在尝试创建一个Python脚本,用于从FTP获取文件。它现在正在工作,但我在免费主机页面上测试了它。如果我将其连接到我的专用服务器FTP服务,它将失败 500命令不明白 我认为失败的命令是ftp.mlsd()。我不知道我的服务器是否需要特殊的配置 代码Python 3.5 def realizarConexion(): a_server = "" a_user = "" a_pass = "" a_port = # Conectarse con los métodos connect y

我正在尝试创建一个Python脚本,用于从FTP获取文件。它现在正在工作,但我在免费主机页面上测试了它。如果我将其连接到我的专用服务器FTP服务,它将失败

500命令不明白

我认为失败的命令是
ftp.mlsd()
。我不知道我的服务器是否需要特殊的配置

代码Python 3.5

def realizarConexion():
a_server = ""
a_user = ""
a_pass = ""
a_port = 

# Conectarse con los métodos connect y login
try:
    ftp = FTP() 
    ftp.connect(a_server, a_port, -999) 
    ftp.login(a_user, a_pass)
    #ftp.dir()
    estado = validaFecha()
    if estado:
        descargarFicheros(ftp)
    else:
        print("No existe una anterior fecha de respaldo configurada")
    ftp.close()
except Exception as e:
    print("Fallo al conectar con FTP %s: %s" %(a_server, e))

def obtenerFecha():
ultFecha = ""
try:
    fDate = open("date.txt","r")
    if fDate.mode == 'r':
        ultFecha = fDate.read()
except Exception as e:
    print("Sin fecha asignada!")
return ultFecha

def validaFecha():
estadoFecha = True
try:
    fDate = open("date.txt","r")
    if fDate.mode == 'r':
        ultFecha = fDate.read()
        print("fecha: %s" %ultFecha)
except Exception as e:
    respaldo = input('No hay fechas configuradas, desea tomar la fecha actual como fecha de ultimo respaldo! - (Y / N): ')
    if respaldo.lower() == "y":
       asignarFechaCopia()
       print("La asignación de la fecha se a ha generado con exito")
       estadoFecha = True
    elif respaldo.lower()  == "n":
        print("Copia de seguridad detenida!") 
        estadoFecha = False
    else:
        print("Copia de seguridad detenida!")
        estadoFecha = False
return estadoFecha

def descargarFicheros(ftp): 
try:
    for file, parametros in ftp.mlsd():
        if file != '.' and file != '..':
            fechaCopia = obtenerFecha()[0:10]
            horaCopia = obtenerFecha()[11:19]
            fechaModif = datetime.datetime.strptime(parametros["modify"][0:-6],"%Y%m%d").date()
            horaModif = datetime.datetime.strptime(parametros["modify"][8:14],"%H%M%S").time()
            f1 = time.strptime(str(fechaCopia) + " " + str(horaCopia), "%Y-%m-%d %H:%M:%S")
            f2 = time.strptime(str(fechaModif) + " " + str(horaModif), "%Y-%m-%d %H:%M:%S")
            if f2 > f1:
                print("Se ha actualizado el fichero => %s" %file)
                ftp.retrbinary("RETR " + file ,open(file, 'wb').write)
            else:
                print("%s Archivo sin cambios %s %s " %(fechaCopia,fechaModif,file))
    print("Proceso finalizado!! Se ha actualzado la fecha de copiado de archivos.")
    asignarFechaCopia()                     
except Exception as e:
    print("Error: %s" %e)    

def asignarFechaCopia():
t = time.strftime("%Y-%m-%d %H:%M:%S")
fDate = open("date.txt","w+")
fDate.write(t)
fDate.close()

#Inicialización del Script     
realizarConexion()

您可以使用wireshark或tcpdump,通过过滤端口21,查看以明文形式发送到服务器的内容。
您应该能够准确地看到正在发生的事情以及“500命令不可理解”的来源。

许多服务器不支持
MLSD
命令,因为它是一个相对较新的命令(在FTP术语中)。特别是IIS没有


如果只需要文件名,请使用

如果需要文件属性,则必须使用(或)并解析返回的列表


另请参见

谢谢您的更正和回答!!,如果我需要文件时间戳,FTP.nlst是否有效?否
nlst
不会给您时间戳(除非您为
nlst
返回的每个文件调用
MDTM
,另请参见)。对于不支持
MLSD
的服务器上带有时间戳的列表,您需要
dir
LIST
命令)。