在Python Subprocess中使用Tshark会产生语法错误

时间:2013-10-04 10:22:51

标签: python subprocess tshark

我正在尝试开发一个脚本来读取pcap文件并从中提取一些字段,但使用tshark作为子进程。但是我收到关于cmd的语法错误。任何人都可以帮我解决这个问题吗?

def srcDestDport (filename):
  cmd = r"tshark -o column.format:"Source","%s", "Destination","%d", "dstport"," %uD"' -r %s"%(filename)
  subcmd = cmd.split(' ')
  lines = subprocess.Popen(subcmd,stdout=subprocess.PIPE)
  return lines

1 个答案:

答案 0 :(得分:2)

就Python而言,您似乎在cmd定义中缺少一些逗号:

cmd = r"tshark -o column.format:"Source","%s", "Destination","%d", "dstport"," %uD"' -r %s"%(filename)
#              -- no comma here -^                              ----^  ----^     --^

因为"遇到第一个"Source"时第一个字符串结束;原始字符串不会阻止您转义嵌入式引号。

如果您想生成一个参数列表,只需将其直接列为一个列表,也可以保存插入文件名:

cmd = ["tshark", "-o", 
       'column.format:"Source","%s","Destination","%d","dstport"," %uD"',
       "-r", filename]

请注意第3个参数周围的单引号以保留命令行参数中的引号。

这样就不需要拆分并保留文件名中的空格。