其实我试图将下面的代码传递给bash。但我认为tshark和pythonic%s的%s会以某种方式混合。它没有提供足够的参数格式字符串错误。
def traffic_dest_port(self,filepcap):
cmd = "tshark -o column.format:'\"Source\", \"%s\", \"Destination\", \"%d\", \"dstport\", \"%uD\"' -r %s |sort|uniq " %filepcap
subprocess.call(cmd,shell=True)
你可以帮我解决这个问题吗?
感谢。
答案 0 :(得分:0)
你猜对了。 Python的%
运算符将尝试替换字符串中的每个 %
说明符,而不仅仅是其中的一些。由于它找到了4个%
说明符,并且只有一个值,因此会显示TypeError: not enough arguments for format string
。
但是,即使它没有,你是如何猜测它想要从这四个中取代哪一个?我是一个人,即使我猜不出来,所以如果我猜错了,希望你能弄明白如何调整答案以满足你的需求。
解决这个问题的一种方法是通过加倍来逃避你不希望Python处理的百分比:
cmd = "tshark -o column.format:'\"Source\", \"%%s\", \"Destination\", \"%%d\", \"dstport\", \"%%uD\"' -r %s |sort|uniq " %filepcap
如printf
-style String Formatting上的文档中所述,说明符%%
表示“没有转换参数,结果会产生'%'
个字符。”
如果你打印出结果(在尝试调试这样的东西时你应该总是这样!),你会看到%s
已被filepcap
值替换,但是%%s
已变为%s
。
但是,更简单的解决方案是使用不需要%
的其他格式化机制,例如str.format
:
cmd = "tshark -o column.format:'\"Source\", \"%s\", \"Destination\", \"%d\", \"dstport\", \"%uD\"' -r {} |sort|uniq ".format(filepcap)