1

Pythonファブリックでファイルを更新しようとしています

run('sed -i s/jahil/%s/g /etc/nginx/sites-enabled/%s' % (account))

また

run('sed -i "s/jahil/%s/g" /etc/nginx/sites-enabled/%s' % (account))

エラー:

TypeError: not enough arguments for format string

何か案が ?どうもありがとう !

4

3 に答える 3

5

エラーは問題を示してい%sます。文字列には 2 つのプレースホルダーがありますが、値は 1 つしかありません。2 つの場所で同じ値を使用することを想定しています。その場合:

run('sed -i s/jahil/%s/g /etc/nginx/sites-enabled/%s' % (account, account))

または、同等に、名前付きプレースホルダーを使用できるように辞書を使用します。

run('sed -i s/jahil/%(a)s/g /etc/nginx/sites-enabled/%(a)s' % {"a": account})

この種の文字列置換を完全に Python で行うのは簡単です。砲撃するのではなく、そのようにすることを検討するかもしれません。

于 2012-07-09T14:58:11.693 に答える
2

エラーが言うように、あなたが言う引数の数とあなたが提供する数の間に不一致があります。それらを同じにしたいので、自然なエラー:

run('sed -i "s/jahil/%s/g" /etc/nginx/sites-enabled/%s' % (account, account))
于 2012-07-09T14:56:33.273 に答える
1

フォーマット文字列に 2 つあるため、構築する文字列は 2 つの引数を取得することを期待して ます%s string

accountsが 2 つの文字列のタプルでない限り、このメッセージが表示されます。

次のようなものが必要です。

   % (account, something_else)

これらの文字列の両方が必要な場合は、それで十分accountです % (account, account)

于 2012-07-09T14:56:29.750 に答える