2013-06-27 37 views
2

當我執行python腳本與此:蟒蛇subprocess.popen tshark的一些ARGS的作品,而不是其他

tsharkCall = ["tshark", "-a", "duration:6", "-i", "2", "-w", "thsark.pcap"] 
tsharkProc = subprocess.Popen(tsharkCall, bufsize=0, executable="C:\\Program Files\\Wireshark\\tshark.exe") 

與預期內容的PCAP文件正式出現在同一文件夾中的腳本。

的第二個步驟,創建從PCAP一個文本文件不起作用:

tsharkCall = ["tshark", "-i", "-", "<", "tshark.pcap", ">", "tshark.txt", "-V"] 
tsharkProc = subprocess.Popen(tsharkCall, bufsize=0, executable="C:\\Program Files\\Wireshark\\tshark.exe") 

我看到在cmd窗口「捕獲標準輸入」,但沒有「捕獲X的數據包」,並沒有tshark的.txt文件出現在文件夾中。

從同一地點在命令提示符下,這樣做,我從劇本,希望這項工作:

>"C:\Program Files\Wireshark\tshark.exe" -i - < "tshark.pcap" > "tshark.txt" -V 

這似乎有點奇怪,一個電話工程和其他沒有。任何想法,我失蹤了什麼?

回答

2

subprocess.Popen默認繞過CMD.EXE/sh,因此命令行I/O重定向(<>)將不起作用。你可以得到類似的效果是這樣的:

tsharkCall = ["tshark", "-i", "-", "-V"] 
tsharkIn = open("tshark.pcap", "rb") 
tsharkOut = open("tshark.txt", "wb") 

tsharkProc = subprocess.Popen(tsharkCall, 
           stdin=tsharkIn, 
           stdout=tsharkOut, 
           executable="C:\\Program Files\\Wireshark\\tshark.exe") 
+1

謝謝!我發現「 - 」需要在「-i」之後出現,否則這就是我需要知道的。 – rlaing

+0

@rlaing Hmph,tshark不遵守正確的約定。我已經調整了答案。 – zwol

2

這也適用

tsharkCall = ["C:\\Program Files\\Wireshark\\tshark.exe", "-P", "-V", "-x", "-r", "C:\\Data\\PCAP_TEST_FILES\\test.pcap"] 
tsharkOut = open("tshark.txt", "wb") 

tsharkProc = subprocess.call(tsharkCall, stdout=tsharkOut)