私はAdafruit 16x2 RGB LCDを使ってRaspberry Piプロジェクト用の小さなスクリプトを書いた。
def KismetScanner():
print 'Kismet Scan'
#clearlogs = subprocess.Popen('rm -r /var/log/kismet; mkdir /var/log/kismet', shell=True, stderr=subprocess.PIPE, stdout=PIPE)
monitormode = subprocess.Popen('service ifplugd stop; ifconfig wlan0 down; iwconfig wlan0 mode monitor; ifconfig wlan0 up', shell=True)
lcd.clear()
lcd.backlight(lcd.YELLOW)
lcd.message("Enabled\nMonitor Mode")
sleep(2)
lcd.clear()
lcd.message("Scanning for\nAccessPoints 60s")
kismetscan = subprocess.Popen('kismet&', shell=True)
sleep(60)
grep1essid = subprocess.Popen('grep -oP "SSID.*>\K.*(?=<)" /var/log/kismet/Kismet-Feb-28-2015-1.xml | sed -n 1p', shell=True, stderr=subprocess.PIPE, stdout=PIPE)
grep1aOut, grep1aErr = grep1essid.communicate()
grep1bssid = subprocess.Popen('grep -oP "SSID.*>\K.*(?=<)" /var/log/kismet/Kismet-Feb-28-2015-1.xml | sed -n 2p', shell=True, stderr=subprocess.PIPE, stdout=PIPE)
grep1bOut, grep1bErr = grep1bssid.communicate()
print grep1aOut
print grep1bOut
lcd.clear()
lcd.backlight(lcd.GREEN)
lcd.message(grep1aOut + '\n' + grep1bOut)
monitormodeoff = subprocess.Popen('ifconfig wlan0 down; iwconfig wlan0 mode managed; ifconfig wlan0 up; service ifplugd start', shell=True)
sleep(2)
スクリプトはKismetスキャンを実行し、最初に見つかったSSIDとBSSIDを抽出してLCDに印刷します。問題は、grep1aOutとgrep1bOutにSSIDとBSSIDを保存した後に正しい出力を印刷しますが、LCDには表示されないことです。 SSIDだけで最初の行が出てくるのになぜか分からないですね。
では、エラーはどこにありますか?
答え1
私はこれらのgrep*Out
変数がPopenのstderr / stdoutであるため、末尾の改行を含めると確信しています...ディスプレイは2行だけを印刷するのでこれを説明します。この試み:
msg = grep1aOut.strip() + '\n' + grep1bOut.strip()
lcd.message(msg)