python subprocess.popen tshark可用于某些参数,但不能用于其他参数

python subprocess.popen tshark可用于某些参数,但不能用于其他参数,python,subprocess,tshark,Python,Subprocess,Tshark,当我使用以下命令执行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创建文本文件的第二

当我使用以下命令执行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创建文本文件的第二个过程不起作用:

tsharkCall = ["tshark", "-i", "-", "<", "tshark.pcap", ">", "tshark.txt", "-V"]
tsharkProc = subprocess.Popen(tsharkCall, bufsize=0, executable="C:\\Program Files\\Wireshark\\tshark.exe")
tsharkCall=[“tshark”、“-i”、“-”、“”、“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
“C:\Program Files\Wireshark\tshark.exe”-i-<“tshark.pcap”>“tshark.txt”-V

一个电话有效,另一个电话无效,这似乎很奇怪。关于我遗漏了什么,有什么想法吗?

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")

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")
这同样有效

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)  
这同样有效

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)  

非常感谢。我发现“-”必须紧跟在“-I”之后,但除此之外,这正是我需要知道的。@rlaining-Hmph,tshark当时没有遵守适当的惯例。我已经调整了答案,谢谢!我发现“-”必须紧跟在“-I”之后,但除此之外,这正是我需要知道的。@rlaining-Hmph,tshark当时没有遵守适当的惯例。我已经调整了答案。