Quando usar subprocess.call () ou subprocess.Popen (), executando airodump

Eu tenho este pequeno script que coloca o seu dispositivo sem fio no modo monitor. Ele faz uma varredura de airodump e depois de terminar a varredura despeja a saída para file.txt ou uma variável, então eu posso raspar o BSSID e qualquer outra informação que possa precisar.

Eu sinto que não entendi o conceito ou a diferença entresubprocess.call() esubprocess.Popen().

Isto é o que eu tenho atualmente:

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

Eu ainda não sei onde e quando e de que maneira usarsubprocess.call() esubprocess.Popen()

A coisa que eu acho mais confusa é astdout estderr args. O que éPIPE?

Outra coisa que eu poderia me consertar uma vez que eu entendi melhor é isso:

Quandorunning subprocess.Popen() e executando o airodump, a janela do console aparece mostrando a varredura. Existe uma maneira de esconder isso do usuário para limpar as coisas?

questionAnswers(1)

yourAnswerToTheQuestion