SConsでは、私のコマンドジェネレーターは途方もなく長いコマンドラインを作成します。ビルドログで読みやすくするために、これらのコマンドを複数の行に分割できるようにしたいと思います。
たとえば、次のようなSConsciptがあります。
import os
# create dependency
def my_cmd_generator(source, target, env, for_signature):
return r'''echo its a small world after all \
its a small world after all'''
my_cmd_builder = Builder(generator=my_cmd_generator, suffix = '.foo')
env = Environment()
env.Append( BUILDERS = {'MyCmd' : my_cmd_builder } )
my_cmd = env.MyCmd('foo.foo',os.popen('which bash').read().strip())
AlwaysBuild(my_cmd)
実行すると、次のようになります。
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
echo its a small world after all \
its a small world after all
its a small world after all
sh: line 1: its: command not found
scons: *** [foo.foo] Error 127
scons: building terminated because of errors.
os.systemとos.popenを使用してPythonシェルでこれを行うと、読み取り可能なコマンド文字列が取得され、サブシェルプロセスがすべての行を1つのコマンドとして解釈します。
>>> import os
>>> cmd = r'''echo its a small world after all \
... its a small world after all'''
>>> print cmd
echo its a small world after all \
its a small world after all
>>> os.system( cmd)
its a small world after all its a small world after all
0
SConsでこれを行うと、各行が一度に1つずつ実行されますが、これは私が望んでいることではありません。
また、コマンドをシェルスクリプトに組み込んでから、シェルスクリプトを実行することは避けたいと思います。これは、文字列をエスケープする狂気を生み出すからです。
これは可能ですか?
更新:
クールナペ、
$CCCOMSTRについての手がかりをありがとう。残念ながら、私はSConsがすぐにサポートする言語を使用していないため、独自のコマンドジェネレーターを作成しています。ジェネレーターを使用して、SConsに次のことを実行させるにはどうすればよいですか?
echo its a small world after all its a small world after all'
しかし、印刷
echo its a small world after all \
its a small world after all
?