Gibt es eine andere Möglichkeit als die Verwendung des airport
Befehlszeilendienstprogramms, um die Liste der verfügbaren WLAN-Netzwerke programmgesteuert abzurufen (für den Verbrauch durch eine Anwendung)? Hier ist der Kontext:
Ich habe eine Befehlszeilenanwendung zum Verwalten von WLAN-Netzwerken ( https://github.com/keithrbennett/wifiwand , gem install wifi-wand
), in der ich die Liste der verfügbaren WLAN-Netzwerke mit erhalte airport -s
.
Da die Netzwerknamen rechtsbündig dargestellt werden, gibt es leider keine Möglichkeit festzustellen, ob oder wie viele führende Leerzeichen der Name enthält. Es gibt eine -x-Option, um die Daten im XML-Format auszugeben, aber in Ruby erfordert das Analysieren von XML normalerweise die Installation des nokogiri
Gems, was legendär problematisch ist, und ich möchte das meinen Benutzern nicht aufzwingen. Also gehe ich diesen seltsamen und weniger als 100% zuverlässigen Prozess durch, um in den meisten, aber nicht allen Fällen die richtigen Ergebnisse zurückzugeben.
Welche anderen Möglichkeiten habe ich, falls vorhanden, um diese Informationen zu erhalten?
Sie könnten (falsch) verwenden awk
, um das Ergebnis zu filtern:
airport -s -x| awk ' { if (catch == 1) { print; catch=0 } }
/SSID_STR/ { catch=1 }'
<string>UPC Wi-Free</string>
<string>UPCE191589</string>
<string>The Cloud</string>
<string>UPCE191589</string>
<string>The Cloud</string>
Nicht sehr schön, aber funktioniert :-)
OTOH, eine SSID kann alles sein, sie muss nicht einmal druckbar sein (siehe Gibt es einen Standard, der definiert, was eine gültige SSID und ein gültiges Passwort ist? ). Daher wird jeder Versuch, SSID in textbasierten Dienstprogrammen zu handhaben, wahrscheinlich früher oder später scheitern.
Keith Bennett
airport -s -x | awk '{ if (catch == 1) { print; catch=0 } } /SSID_STR/ { catch=1 }'
.kein Hang
Keith Bennett
kein Hang