Cuándo usar subprocess.call () o subprocess.Popen (), ejecutando airodump

Tengo este pequeño script que pone su dispositivo inalámbrico en modo monitor. Realiza un escaneo en airodump y luego, después de finalizar el escaneo, descarga la salida a file.txt o una variable, de modo que luego pueda eliminar el BSSID y cualquier otra información que pueda necesitar.

Siento que no he comprendido el concepto o la diferencia entresubprocess.call() ysubprocess.Popen().

Esto es lo que tengo actualmente:

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

Sigo sin tener idea de dónde y cuándo y de qué manera usarsubprocess.call() ysubprocess.Popen()

Lo que creo que más me confunde es elstdout ystderr args Que esPIPE?

Otra cosa que podría arreglarme una vez que tenga una mejor comprensión es esta:

Cuandorunning subprocess.Popen() y ejecutando airodump, la ventana de la consola aparece y muestra el escaneo. ¿Hay alguna forma de ocultarlo del usuario para limpiar las cosas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta