• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Eseguire comandi DOS da Python

Giuppe

Utente Esperto
Autore del topic
15 Gennaio 2008
1.144
0
Miglior risposta
0
Lo staff e il forum non si prende la responsabilità di quello che potreste fare con questa guida!!



Nonostante i sistemi operativi si siano evoluti in modo impressionante negli ultimi anni proponendo interfacce grafiche sempre più complesse e di forte impatti visivo, hanno conservato la possibilità di eseguire script via shell. Non importa se usiamo windows o linux o quel che ci pare, tutti questi sistemi continuano a presentare una finestrella o shell che consente di eseguire comandi specifici che nella maggior parte dei casi sono rapidi, efficaci e soprattutto sintetici.
Rimane da chiedersi come è possibile sfruttare questi comandi ed incapsularli all'interno dei nostri programmi, nel nostro caso proporremo un esempio che attraverso python individua l'indirizzo IP del nostro PC ma è possibile estendere l'esempio a qualsiasi comando purchè si adotti la corretta sintassi!
Tipicamente per conoscere l'indirizzo ip dovremmo cliccare col mouse sull'icona della connessione di rete, da lì esplorare le interfacce di rete attive, individuare l'interfaccia di interesse, esaminarne le proprietà ecc.
Senza dubbio dal punto di vista dell'utente è molto comodo, non lo è altrettanto dal punto di vista della programmazione.
Un metodo altrernativo e molto veloce per conoscere il proprio indirizzo IP è aprire una shell di comando (la mitica finestrella del DOS) e lanciare il comando ipconfig
C:\>ipconfig
Windows IP Configuration
Ethernet adapter LAN Connection:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
Sarebbe quindi utile catturare questo output e poterlo rielaborare al fine di estrarne le notizie di interesse (nel nostro esempio isolare IP Address)
La versatilità di Python e la sua grande iterazione col sistema operativo ospitante consente di eseguire comandi DOS in modo semplice ed immediato.
È sufficiente sfruttare il metodo popen dela classe os e applicare il metodo read all'oggetto risultante:
sintassi:
f = os.popen('cmd')
%dove cmd è il comando di interesse
Proviamo a racchiudere tutte queste informazioni in uno script
________________________________
%importiamo la libreria os
import os
f = os.popen('ipconfig')
s = f.read()
print s
________________________________
Il contenuto della variabile s altro non è che lo stesso output che avremmo avuto nel caso di esecuzione diretta del comando ipconfig
Windows IP Configuration
Ethernet adapter LAN Connection:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
A questo punto s contiene un comunissimo testo che possiamo rielaborare a nostro piacimento con i metodi applicabili alle stringhe python.
Altrentativamente potremmo filtrare l'output già a livello shell: proviamo infatti a lanciare via shell il comando ip config e filtrarlo col comando find:
C:\>ipconfig | find /I "IP Address"
IP Address. . . . . . . . . . . . : 192.168.1.2
Find è impostato per isolare le sole righe contenenti la stringa "IP Address" per cui il piccolo script precedente potrebbe diventare
________________________________
%importiamo la libreria os
import os
f = os.popen('ipconfig | find /I \"IP Address\"')
s = f.read()
print s
________________________________
A questo punto la variabile s conterrà solo le informazioni di interesse (ho usato find perchè in questo momento sto usando una macchina Windows, immaginate cosa potremmo fare col grep di unix!)
Attenzione ad usare il corretto character stuffing sostituendo le " con le \"
Infine vorrei evidenziare che lo script può essere ulteriorente semplificato (ulteriormente!) se ospitato su una macchina linux, in tal caso infatti è possibile ottenere gli stessi risultati usando il metodo getoutput della classe commands, provare per credere!

Fonte: Web