2

いくつかのメイクファイルを生成するスクリプトを作成しようとしています。この複数行の文字列をフォーマットしたいのですが、奇妙なエラーが発生します。

コード:

make_content = """ PCC = pgcc 
%(bench)_serial: src/main.c src/%(bench)_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/%(bench)_serial src/main.c src/%(bench)_serial.c

clean:
\trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}

エラー:

Traceback (most recent call last):
  File "./new_bench.py", line 27, in <module>
    \trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}
ValueError: unsupported format character '_' (0x5f) at index 21

何か案は?

注: これは makefile の切り詰められたバージョンであり、コメントはありません。注[2]: 'umpalumpa' は、文字列であることを確認するためのプレースホルダーです。それはいつの日か現実のものとなるでしょう。

編集:私はpython 2.7を使用しています

4

2 に答える 2

6

なぜそれがうまくいかなかったのかについての答えをすでに得ているので、より良い方法であり、ifformat関数を使用することもお勧めします (`Python 2.6+ を使用している場合): -

"src/{bench}_serial.c".format(bench='umpalumpa')

したがって、文字列の場合は次のようになります。

ake_content = """ PCC = pgcc 
{bench}_serial: src/main.c src/{bench}_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/{bench}_serial src/main.c src/{bench}_serial.c

clean:
\trm -rf *.o *.oo bin/*""".format(bench='umpalumpa')
于 2012-10-23T05:25:55.527 に答える
4

マッピングキーの後に変換タイプを指定する必要があります。

"%(bench)s_serial" % {'bench':'umpalumpa'}

sアンダースコアの前に注意してください。ここでの出力はまだです"umpalumpa_serial"

変換タイプは常に必須であり、%およびオプションのコンポーネントの後に常に続きます。

トリプルクォート文字列リテラルとシングルクォート文字列リテラルのフォーマットに違いはありません。

于 2012-10-23T05:22:07.927 に答える