Domanda Risolto Trascrivere una scansione in un file.txt

mrcamarium

Utente Silver
7 Gennaio 2022
108
25
6
56
Ultima modifica:
Sto realizzando un Ping Sweep IP
Python:
def ping():
    #Crea un file di testo chiamato "ping.txt" in modalità scrittura
    file = open("ping.txt", "w")
    net = input("Indirizzo IP di destinazione: ")
    net1= net.split('.')
    a = '.'
    net2 = net1[0]+a+net1[1]+a+net1[2]+a
    st1 = int(input("Primo numero: "))
    en1 = int(input("Ultimo numero: "))
    en1=en1+1
    t1= datetime.now()
    print ("Scansione ping in corso: ")
    for ip in range(st1,en1):
        alamat = net2+str(ip)
        res = subprocess.call(['ping', alamat])
        if res == 0: print( "ping ke", alamat, "OK")
    t2= datetime.now()
    total =t2-t1
    print ("Terminato in: ",total)
    #Scrivi i dati di input e i risultati del ping nel file
    file.write(f"Indirizzo IP di destinazione: {net}\n")
    file.write(f"Primo numero: {st1}\n")
    file.write(f"Ultimo numero: {en1-1}\n")
    file.write(f"Scansione ping in corso: \n")
    for ip in range(st1,en1):
        alamat = net2+str(ip)
    res = subprocess.call(['ping', alamat])
    if res == 0: file.write(f"ping ke {alamat} OK\n")
    #Scrivi il tempo totale della scansione
    file.write(f"Terminato in: {total}\n")
    #Chiudi il file
    file.close()
Come risultato mi aspettavo non solo di vedere a video i risultati cosa che fa ma anche di salvare tutti i dati in un file.txt invece salva solo i primi dati come posso modificare questo codice?
Messaggio unito automaticamente:

Python:
net = input("Indirizzo IP di destinazione: ")
net1= net.split('.')
a = '.'
net2 = net1[0]+a+net1[1]+a+net1[2]+a
st1 = int(input("Primo numero: "))
en1 = int(input("Ultimo numero: "))
en1=en1+1
t1= datetime.now()
print ("Scansione ping in corso: ")

# Apri il file in modalità scrittura
with open("risultati_ping.txt", "w") as file:
    # Reindirizza l'output di print sul file
    with contextlib.redirect_stdout(file):
        for ip in range(st1,en1):
            alamat = net2+str(ip)
            res = subprocess.call(['ping', alamat])
            if res == 0: print( "ping ke", alamat, "OK")
t2= datetime.now()
total =t2-t1
print ("Terminato in: ",total)
se faccio in questo modo ottengo un buon risultato, mi potreste controllare il codice se ha bisogno di essere perfezionato?