Выполнение следующей строки кода после subprocess.popen - PullRequest
0 голосов
/ 25 января 2019

Я выполняю команду Tcpdump, используя Popen. В моем коде строка popen запускается, но не выполняет следующую строку кода, следующую за строкой кода popen. Почему это происходит и как я могу решить это? Спасибо.

from subprocess import Popen, PIPE
import os
import time

pw ='12345678'
process = Popen(['sudo', '-S', 'tcpdump', '-i', 'wlp1s0', 'udp', 'port 8308', '-w', 'trace.pcap'], stdout=PIPE,universal_newlines=True,stdin=PIPE)
process.communicate(pw + '\n')[1]
print("Command ran")
time.sleep(3)

Здесь «Команда выполнена» не печатается.

1 Ответ

0 голосов
/ 25 января 2019

process.communicate ожидает завершения процесса.

Если вы хотите отправить ввод в процесс без ожидания завершения, используйте process.stdin.

process.stdin.write(password + "\n")

tcpdump не прекратит работу с вашими параметрами, пока вы не отправите сигнал SIGINT.

Tcpdump, если не работает с флагом -c, продолжит захват пакетов, пока не прервется сигналом SIGINT (сгенерированным, например,набрав свой символ прерывания, обычно control-C) или сигнал SIGTERM (обычно генерируется командой kill (1));если он запускается с флагом -c, он будет захватывать пакеты до тех пор, пока его не прервет сигнал SIGINT или SIGTERM или пока не будет обработано указанное число пакетов.

Вы можете включить флаг -c в свои параметры.

...