estoy corriendo tcpdump
en un subproceso de esta manera:la salida estándar de un subproceso tcpdump después de terminar su
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
El argumento -w -
es importante: se dice tcpdump
para imprimir el archivo resultante a .pcap stdout
.
Luego, voy a acceder a un sitio web usando urllib.open()
. Una vez hecho esto, me gustaría matar tcpdump
y poner lo que imprime en una cadena. He intentado lo siguiente:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
Pero (a menos que esté haciendo algo mal), eso no funciona; Maté el proceso, ahora ya no queda nada por leer. Si utilizo read()
o communicate()
antes de finalizar, mi script simplemente se quedará allí y seguirá y seguirá, esperando a que termine el tcpdump
(que no será).
¿Hay alguna manera de hacerlo (preferiblemente sin bucles)?
Es necesario pasar cada uno de los parámetros a 'tcpdump' por separado:' Popen ([ 'tcpdump', '-s', '0', '-w', '-', 'tcp'], ...) '. El único argumento '-w -' no se interpreta igual que los dos argumentos' -w' y '-', etc. –
Cierto, esa hubiera sido la respuesta correcta :) ¡Gracias de todos modos! –