2012-12-29 8 views
7

Sto provando a scrivere uno script python che può rendere il mio computer associato a un punto di accesso wireless, dato il nome come una stringa. Ad esempio, potrei specificare che desidero connettermi a linksys e che il mio script causerebbe il computer.Associare il mio computer Windows a un AP WiFi con Python

Ho esaminato la domanda this, ma non sono riuscito a capire cosa fare guardando i collegamenti forniti.

Qualcuno può indicarmi la giusta direzione?

+0

Significa collegarsi a una rete wireless? –

+0

@FarukSahin: Sì, mi dispiace, questo è quello che intendevo. Modificherò la domanda. – Michael0x2a

risposta

4

Ho deciso di accettare il suggerimento di Paulo e provare a utilizzare Powershell/la riga di comando. Ho trovato un article sulla connessione a una rete tramite la riga di comando.

Dalla riga di comando, si può fare:

netsh wlan connect <profile-name> [name=<ssid-name>] 

... dove la parte name=<ssid-name> è facoltativo ed è necessariamente solo se il profilo contiene SSID multipli.

Tuttavia, sembra che il profilo debba già esistere sulla macchina affinché funzioni la riga di comando. Ho trovato uno forum post sulla creazione di un profilo in modo programmatico, ma non avevo voglia di passarci sopra.

Se il nome del profilo esiste già, poi da Python si può fare qualcosa di simile a quanto segue:

import subprocess 

def connect_to_network(name): 
    process = subprocess.Popen(
     'netsh wlan connect {0}'.format(name), 
     shell=True, 
     stdout=subprocess.PIPE, 
     stderr=subprocess.PIPE) 
    stdout, stderr = process.communicate() 

    # Return `True` if we were able to successfully connect 
    return 'Connection request was completed successfully' in stdout   

Si tratta di una soluzione imperfetta, e non sono del tutto sicuro se funzionerà in tutti i casi , ma ha funzionato per il mio caso particolare. Ho pensato di pubblicare ciò che mi è venuto in mente nel caso qualcuno volesse provare a modificarlo per renderlo migliore.

+0

Nota che 'subprocess.call()' è più facile di 'subprocess.communicate()' ... vedi anche [Questa risposta] (http://stackoverflow.com/questions/12381733/how-to-run-cmd- finestre-netsh-comando-con-python) –

1

La risposta che hai collegato parla della chiamata di funzioni di basso livello C dall'API di Windows. Giocherellare con cose di basso livello mi fa male al cervello.

C'è a .Net wrapper around the native C calls, è possibile utilizzare questa API di livello superiore direttamente da IronPython. Sfortunatamente non è ben documentato, ma guardare l'esempio C# e scavare oltre le fonti dovrebbe essere più semplice che chiamare l'API sottostante. Questa è una soluzione molto incentrata su Windows, quindi potresti essere meglio served by powershell.

Problemi correlati