【问题标题】:Using Tshark in Python Subprocess is giving syntax error在 Python 子进程中使用 Tshark 会出现语法错误
【发布时间】:2013-10-04 10:22:51
【问题描述】:

我正在尝试开发一个脚本来读取 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

【问题讨论】:

    标签: python subprocess tshark


    【解决方案1】:

    就 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]
    

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

    这也消除了拆分的需要,并在文件名中保留了空格。

    【讨论】:

    • def srcDestDport (文件名): cmd = ["tshark", "-o", 'column.format:"Source","%s","Destination","%d"," dstport"," %uD"' "-r", filename] #subcmd = cmd.split(' ') lines = subprocess.Popen(cmd,stdout=subprocess.PIPE) return lines 当我尝试喜欢这个时,这次我收到 tshark: Invalid -o flag "column.format:"Source","%s","Destination","%d","dstport","%uD"-r" 错误
    • 另一个问题,如果添加“|”、“sort”、“|”、“uniq”,我得到的排序在此内容错误中是意外的。
    • 您没有在 shell 中执行这些命令(这​​通常会处理管道;sortuniq 是单独的 UNIX 命令);而是在 Python 中对内容进行排序。
    • @CorpusCallosum:出于好奇,你为什么不接受这个答案?
    • 错误 :) 直到你警告我才意识到。
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多