[英]Subprocess confuses when passing argument to the bash
实际上,我正在尝试将以下代码传递给bash。 但我认为%s的tshark和pythonic%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)
你能帮我这个忙吗?
谢谢。
您猜对了。 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字符串格式的文档中所述,指定符%%
表示“未转换任何参数,结果中将导致'%'
字符。”
而且,如果您打印出结果(尝试调试此类东西时始终应该这样做!),您会看到%s
已被filepcap
值替换,但是%%s
已变成%s
。
但是,一个更简单的解决方案是仅使用不需要%
的其他格式设置机制,例如str.format
:
cmd = "tshark -o column.format:'\"Source\", \"%s\", \"Destination\", \"%d\", \"dstport\", \"%uD\"' -r {} |sort|uniq ".format(filepcap)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.