我在這樣的子運行tcpdump
後:入門從tcpdump的標準輸出子進程終止它
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
的-w -
的說法是很重要的:它告訴tcpdump
所得到的.pcap文件打印到stdout
。
然後我使用urllib.open()
繼續訪問網站。完成之後,我想殺掉tcpdump
並將其打印到的字符串中。我試過以下內容:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
但是(除非我做錯了什麼),那是行不通的;我殺了這個過程,現在沒什麼可讀的了。如果我在終止前使用read()
或communicate()
,我的腳本就會坐在那裏繼續閱讀,等待tcpdump
完成(它不會)。
有沒有辦法做到這一點(最好沒有循環)?
您需要分別通過各自的參數'tcpdump'的:'POPEN([「tcpdump的」, '-s','0','-w',' - ','tcp'],...)'。單個參數'-w-'不會被解釋爲與兩個參數'-w'和'-'相同,等等。 –
沒錯,這將是正確的答案:)謝謝! –