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