あなたの推測は正しいです。Python の演算子は、文字列内の指定子の一部だけでなく、すべて%
の指定子を置き換えようとします。4 つの指定子と 1 つの値しか見つからないため、 と表示されます。 %
%
TypeError: not enough arguments for format string
しかし、そうでなかったとしても、4 つのうちどれを置き換えたいかをどのように推測できると思いましたか? 私は人間であり、私でさえ推測に苦労しています.
これを回避する 1 つの方法は、Python に処理させたくないパーセントを 2 倍にしてエスケープすることです。
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)