你猜对了。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)