2012-12-29 12 views
7

Ich versuche, ein Python-Skript zu schreiben, das meinen Computer mit einem drahtlosen Zugriffspunkt verknüpfen kann, wobei der Name als Zeichenfolge angegeben wird. Zum Beispiel könnte ich angeben, dass ich eine Verbindung zu linksys herstellen möchte, und mein Skript würde den Computer dazu veranlassen, dies zu tun.Verknüpfen meines Windows-Computers mit einem Wifi-AP mit Python

Ich schaute auf this Frage, war aber nicht in der Lage zu verstehen, was zu tun, indem Sie die bereitgestellten Links.

Kann mir jemand in die richtige Richtung zeigen?

+0

Meinen Sie eine Verbindung zu einem drahtlosen Netzwerk? –

+0

@FarukSahin: Ja, tut mir leid, das habe ich gemeint. Ich werde die Frage bearbeiten. – Michael0x2a

Antwort

4

Ich entschied mich, Paulos Vorschlag zu nehmen und versuchen, Powershell/die Befehlszeile zu verwenden. Ich habe einen article über die Verbindung zu einem Netzwerk über die Befehlszeile gefunden.

in der Befehlszeile können Sie tun:

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

... wo der name=<ssid-name> Teil notwendigerweise optional ist und nur dann, wenn das Profil mehrere SSIDs enthält.

Es sieht jedoch so aus, als ob das Profil bereits auf der Maschine vorhanden sein muss, damit die Befehlszeile funktioniert. Ich habe eine forum post gefunden, um ein Profil programmatisch zu erstellen, aber ich hatte keine Lust, daran teilzunehmen.

Wenn der Profilname bereits vorhanden ist, dann von Python können Sie etwas ähnliches wie die folgenden tun:

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   

Es ist eine unvollkommene Lösung, und ich bin mir nicht ganz sicher, ob es in jedem Fall arbeiten werde , aber es hat für meinen speziellen Fall funktioniert. Ich dachte, ich würde posten, was ich mir ausgedacht habe, falls jemand anderes versuchen sollte, es zu modifizieren, um es besser zu machen.

+0

Beachten Sie, dass 'subprocess.call()' ist einfacher als 'subprocess.communicate()' ... siehe auch [Diese Antwort] (http://stackoverflow.com/questions/12381733/how-to-run-cmd- Windows-Netsh-Befehl-mit-Python) –

1

Die Antwort, die Sie verknüpften, spricht über das Aufrufen von Low-Level-C-Funktionen von der Windows-API. Fummelei mit Low-Level-Zeug macht mein Gehirn weh.

Es gibt a .Net wrapper around the native C calls, Sie können diese höhere Ebene API direkt von IronPython verwenden. Leider ist es nicht gut dokumentiert, aber das C# -Beispiel und das Durchsuchen der Quellen sollten einfacher sein als das Aufrufen der zugrunde liegenden API. Dies ist eine sehr Windows-zentrierte Lösung, so können Sie besser sein served by powershell.