Multi-line strings with formatting

Carsten Haese carsten at uniqsys.com
Fri Mar 23 13:10:50 EDT 2007


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





More information about the Python-list mailing list