![Python 함수는 무언가를 인쇄해야 하지만 아무것도 하지 않습니다.](https://linux55.com/image/61565/Python%20%ED%95%A8%EC%88%98%EB%8A%94%20%EB%AC%B4%EC%96%B8%EA%B0%80%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%B4%EC%95%BC%20%ED%95%98%EC%A7%80%EB%A7%8C%20%EC%95%84%EB%AC%B4%EA%B2%83%EB%8F%84%20%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 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이기 때문에 후행 줄바꿈을 포함할 것이라고 확신합니다... 디스플레이가 두 줄만 인쇄하기 때문에 이를 설명할 것입니다. 이 시도:
msg = grep1aOut.strip() + '\n' + grep1bOut.strip()
lcd.message(msg)