2

これでpythonスクリプトを実行すると:

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 からテキスト ファイルを作成する 2 番目の手順は機能しません。

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

cmd ウィンドウに「Capturing on Standard input」と表示されますが、「x packet capture」はなく、フォルダーに tshark.txt ファイルも表示されません。

同じ場所のコマンド プロンプトから、これは私がスクリプトから期待している仕事をします:

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

一方の呼び出しが機能し、もう一方の呼び出しが機能しないのは奇妙に思えます。私が見逃しているものについてのアイデアはありますか?

4

2 に答える 2

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")
于 2013-06-27T18:56:54.393 に答える
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)  
于 2015-10-09T08:19:52.073 に答える