Forum >> Principianti >> [risolto] non riesco a inviare file su Altervista con ftplib

Pagina: 1

Salve a tutti.

non riesco ad inviare un file di testo (creato per prova) via ftplib su un sito di altervista.

il codice usato è il seguente:



import os
import ftplib

session=ftplib.FTP('rpiplant.altervista.org','rpiplant','**********')


nomefile="/home/pi/test.txt"

session.storbinary("STOR " + nomefile, open (nomefile, "rb"), 1024)

Copy






L'errore è



Traceback (most recent call last):
File "/mnt/usbhd/prove/ProvaFTP.py", line 58, in <module>
session.storbinary("STOR " + nomefile, open (nomefile, "rb"), 1024)
File "/usr/lib/python3.4/ftplib.py", line 503, in storbinary
with self.transfercmd(cmd, rest) as conn:
File "/usr/lib/python3.4/ftplib.py", line 398, in transfercmd
return self.ntransfercmd(cmd, rest)0
File "/usr/lib/python3.4/ftplib.py", line 364, in ntransfercmd
resp = self.sendcmd(cmd)
File "/usr/lib/python3.4/ftplib.py", line 272, in sendcmd
return self.getresp()
File "/usr/lib/python3.4/ftplib.py", line 245, in getresp
raise error_perm(resp)
ftplib.error_perm: 553 Impossibile aprire quel file: File o directory non esistente

Copy




Ho controllato e il file è nella posizione giusta e possiede tutti i permessi: "-RWXRWXRWX"

con un file di bash riesco a mandare il file con il seguente codice:


#!/bin/bash
/usr/bin/ftp -inv rpiplant.altervista.org <<ENDFTP


user rpiplant *********

bin

#provo a inviare un file di testo in pi/home
lcd /home/pi
put test.txt test1.txt



ho provato anche a sostituire session=ftplib.FTP('rpiplant.altervista.org','rpiplant','**********') con session=ftplib.FTP('ftp://rpiplant.altervista.org','rpiplant','**********')

e mi dà il seguente errore:


Traceback (most recent call last):
File "/mnt/usbhd/prove/ProvaFTP.py", line 51, in <module>
session=ftplib.FTP('ftp://rpiplant.altervista.org','rpiplant','aPQq7jNJpWzS')
File "/usr/lib/python2.7/ftplib.py", line 120, in __init__
self.connect(host)
File "/usr/lib/python2.7/ftplib.py", line 135, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known




Dove sbaglio?

Grazie per l'attenzione

Un saluto

LaPa

--- Ultima modifica di LaPa in data 2018-11-15 23:12:56 ---
Carissimi dopo tanto peregrinare ho trovato la risposta: facevo un errore di sintassi. Dopo STOR non dovevo concatenare, pertanto la sintassi corretta è:







import os
import ftplib

session=ftplib.FTP('rpiplant.altervista.org','rpiplant','**********')


nomefile="/home/pi/test.txt"

session.storbinary("STOR   nomefile", open (nomefile, "rb"), 1024)



In questa maniera mi ritrovo il file test.txt col nome nomefile su altervista.

se voglio chiamarlo test.txt la sintassi diventa:




import os
import ftplib

session=ftplib.FTP('rpiplant.altervista.org','rpiplant','**********')


nomefile="/home/pi/test.txt"

session.storbinary("STOR   test.txt", open (nomefile, "rb"), 1024)


Saluti

LaPa

--- Ultima modifica di LaPa in data 2018-11-16 15:58:23 ---

--- Ultima modifica di LaPa in data 2018-11-16 16:00:07 ---
Grande, trovare un errore da soli è sempre il più appagante dei risultati.

Ricordati sempre di usare il tasto code, quello che trovi prima della tavolozza dei colori, per formattare il codice.

Cya
Forse questa volta è veramente tutto chiaro!




Dopo alcune prove ho capito di più riguardo all'errore che facevo




Questo è il pezzo di codice che mi dava errore quando non mi funzionava.




session.storbinary("STOR " + nomefile, open (nomefile, "rb"), 1024)





Dopo "STOR ", se non ho capito male, si indica come deve essere nominato il file su Altervista. Dunque se vogliamo nominarlo con un nome tipo Test.txt allora semplicemente scriveremo

"STOR Test.txt"


al posto di




"STOR " +nomefile





Se invece il nome del file che deve apparire su Altervista è una variabile, allora va bene quella sintassi

"STOR " +nomefile
.




Il mio codice non funzionava perché indicavo con un' unica variabile (nomefile) 2 cose diverse:

1) dove è posizionato nel computer e come si chiama il file che si deve spostare su Altervista

2) come deve essere nominato il file una volta inviato su Altervista e siccome nomefile era una variabile che conteneva oltre al nome del file anche l'indirizzo assoluto allora mi dava errore.




Pertanto se il voglio spostare il file che sta in home/pi e si chiama test.txt e voglio che questo venga rinominato con una variabile e non con un nome fisso devo creare 2 variabili, ad esempio: nomefile che indica il file da spostare e nomefile1 che rinomina il file su altervista. In quel caso il codice sarà:

import os
import ftplib
session=ftplib.FTP('rpiplant.altervista.org', 'rpiplant','********')
nomefile="home/pi/test.txt"
nomefile1="test2.txt"

session.storbinary("STOR " + nomefile1, open (nomefile, "rb"), 1024)

session.quit()






Funziona!!!

Capire bene l'errore è stata una soddisfazione!!!

LaPa


--- Ultima modifica di LaPa in data 2018-11-17 23:28:51 ---
Capire bene l'errore è stata una soddisfazione!!!
:ok:


Pagina: 1



Esegui il login per scrivere una risposta.