Multi-line strings with formatting
Steve Holden
steve at holdenweb.com
Fri Mar 23 14:25:34 EDT 2007
Carsten Haese wrote:
> On Fri, 2007-03-23 at 09:54 -0700, gburdell1 at gmail.com wrote:
>> When constructing a particularly long and complicated command to be
>> sent to the shell, I usually do something like this, to make the
>> command as easy as possible to follow:
>>
>> commands.getoutput(
>> 'mycommand -S %d -T %d ' % (s_switch, t_switch) +
>> '-f1 %s -f2 %s ' % (filename1, filename2) +
>> '> %s' % (log_filename)
>> )
>>
>> Can anyone suggest a better way to construct the command, especially
>> without the "+" sign at the end of each line (except the last) ? If I
>> take out the "+", then I need to move all the variables to the end, as
>> so:
>>
>> commands.getoutput(
>> 'mycommand -S %d -T %d '
>> '-f1 %s -f2 %s '
>> '> %s'
>> % (s_switch, t_switch, filename1, filename2, log_filename)
>> )
>>
>> or:
>>
>> commands.getoutput(
>> '''mycommand -S %d -T %d \
>> -f1 %s -f2 %s \
>> > %s'''
>> % (s_switch, t_switch, filename1, filename2, log_filename)
>> )
>
> You get the best of both worlds, i.e. one big multiline string with
> in-line parameters, by using a mapping:
>
> commands.getoutput(
> '''mycommand -S %(s_switch)d -T %(t_switch)d \
> -f1 %(filename1)s -f2 %(filename2)s \
> > %(log_filename)s'''
> % locals() )
>
> Of course I'm assuming that s_switch etc. are local variables. If
> they're not, well, they ought to be.
>
> -Carsten
>
>
If that doesn't suit then build a list:
l = [
'mycommand -S %d -T %d ' % (s_switch, t_switch) ,
'-f1 %s -f2 %s ' % (filename1, filename2) ,
'> %s' % (log_filename)
]
and then return commands.getoutput("".join(l)).
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
Recent Ramblings http://holdenweb.blogspot.com
More information about the Python-list
mailing list