Kiedy używać subprocess.call () lub subprocess.Popen (), uruchamiając airodump

Mam ten mały skrypt, który przełącza urządzenie bezprzewodowe w tryb monitorowania. Wykonuje skanowanie airodump, a następnie po zakończeniu skanowania zrzuca dane wyjściowe do pliku.txt lub zmiennej, dzięki czemu mogę zeskrobać BSSID i inne potrzebne informacje.

Czuję, że nie zrozumiałem pojęcia ani różnicy między nimisubprocess.call() isubprocess.Popen().

Właśnie to mam obecnie:

def setup_device(): 
    try:
        output = open("file.txt", "w")
        put_device_down = subprocess.call(["ifconfig", "wlan0", "down"])
        put_device_mon = subprocess.call(["iwconfig", "wlan0", "mode", "monitor"]) 
        put_device_up = subprocess.call(["iwconfig", "wlano", "up"])
        start_device = subprocess.call(["airmon-ng", "start", "wlan0"])
        scanned_networks = subprocess.Popen(["airodump-ng", "wlan0"], stdout = output)  
        time.sleep(10)  
        scanned_networks.terminate()

    except Exception, e:
         print "Error:", e

Nadal nie mam pojęcia, gdzie i kiedy oraz w jaki sposób korzystaćsubprocess.call() isubprocess.Popen()

To, co wydaje mi się najbardziej mylące, tostdout istderr args. Co jestPIPE?

Inną rzeczą, którą mógłbym naprawić, gdy tylko lepiej zrozumiem, jest:

Gdyrunning subprocess.Popen() i uruchamiając airodump, pojawia się okno konsoli pokazujące skanowanie. Czy istnieje sposób, aby ukryć to przed użytkownikiem, aby uporządkować rzeczy?

questionAnswers(1)

yourAnswerToTheQuestion