2012-12-29 17 views
7

Próbuję napisać skrypt Pythona, który może sprawić, że mój komputer będzie kojarzony z punktem dostępu bezprzewodowego, podając nazwę jako ciąg. Na przykład mogę określić, że chcę się połączyć z linksys, a mój skrypt spowoduje, że komputer to zrobi.Skojarzenie mojego komputera z Windows z AP wifi z Pythonem

Popatrzyłem na pytanie this, ale nie byłem w stanie zrozumieć, co zrobić, patrząc na dostarczone linki.

Czy ktoś może wskazać mi właściwy kierunek?

+0

Masz na myśli połączenie z siecią bezprzewodową? –

+0

@FarukSahin: Tak, przepraszam, o to mi chodziło. Będę edytować pytanie. – Michael0x2a

Odpowiedz

4

Postanowiłem wziąć propozycję Paula i spróbować użyć Powershell/linii poleceń. Znalazłem article o łączeniu się z siecią za pomocą wiersza poleceń.

z linii poleceń, można to zrobić:

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

... gdzie name=<ssid-name> część jest opcjonalne i niekoniecznie tylko jeżeli profil zawiera wiele identyfikatorów SSID.

Wygląda jednak na to, że profil musi już istnieć na komputerze, aby rzeczy linii poleceń działały. Znalazłem forum post programowo tworząc profil, ale nie miałem ochoty go przeszukiwać.

Jeśli nazwa profil już istnieje, to z Pythonie można zrobić coś podobnego do poniższego:

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   

To niedoskonałym rozwiązaniem, a ja nie jestem do końca pewien, czy to zadziała w każdym przypadku , ale zadziałało to w moim przypadku. Pomyślałem, że opublikuję to, co wymyśliłem na wypadek, gdyby ktoś chciał spróbować zmodyfikować to, żeby było lepiej.

+0

Należy zauważyć, że 'subprocess.call()' jest łatwiejsze niż 'subprocess.communicate()' ... zobacz także [Ta odpowiedź] (http://stackoverflow.com/questions/12381733/how-to-run-cmd- windows-netsh-command-using-python) –

1

Odpowiedź, którą połączyłeś, dotyczy wywoływania funkcji niskiego poziomu C z poziomu interfejsu API systemu Windows. Fiddling z niskopoziomowymi rzeczami powoduje ból w moim mózgu.

Istnieje a .Net wrapper around the native C calls, można użyć tego wyższego poziomu API bezpośrednio z IronPython. Niestety nie jest to dobrze udokumentowane, ale spojrzenie na próbkę C# i wykopywanie źródeł powinno być łatwiejsze niż wywoływanie bazowego API. Jest to rozwiązanie bardzo skoncentrowane na systemie Windows, więc możesz być lepszy served by powershell.