繁体   English   中英

将参数传递给bash时,子流程会造成混乱

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM