2016-09-29 7 views
0

Я пишу сценарий питона, который выполняет ТСРйитр через subprocess.openПодавляя вывод ТСРйитр полностью

Теперь я хочу, чтобы этот скрипт не выводит ничего на экран (стандартный вывод), а просто работать бесшумно. Я попытался сделать это:

ps_dump = subprocess.Popen(['tcpdump', '-U', '-w', pcapfile, 'port 53'], stdout=subprocess.PIPE) 

Но она по-прежнему выводит эти:


устройство eth0 введенную неразборчивый режим ТСРйитр: прослушивание на eth0, канального типа EN10MB (Ethernet), размер захвата 65535 байтов

0 пакетов захватили

0 пакетов, полученных с помощью фильтра

0 пакетов, отброшенных ядром

устройство eth0 покинул неразборчивый режим


Я хочу, чтобы полностью подавить их. Если я запустил скрипт, он ничего не должен печатать. Я читал, что вы можете подавлять в linux с помощью>/dev/null, но как я могу использовать его в команде Popen выше?

Любые предложения или ответы, как заставить это работать?

+0

Я думаю, что @ λuser имеет это право - ТСРйитр пишет в стандартный поток ошибок, и вы не захватывая этот вывод. Для получения дополнительной информации см .: http://stackoverflow.com/questions/10683184/piping-popen-stderr-and-stdout – Loring

ответ

0

Вы можете передать дескриптор файла в stdout= аргумента, так просто:

with open(os.devnull, 'w') as nullfd: 
    proc = Popen(..., stdout=nullfd) 
+0

Хм, похоже, не работает ... Я попробовал это, прежде чем задавать этот вопрос – vinwin

+1

@vinwin Это действительно работает на моем компьютере с командой вроде 'ls'. Вы уверены, что 'tcpdump' не выводится на stderr? –