Multi-line strings with formatting

Paul McGuire ptmcg at austin.rr.com
Fri Mar 23 22:39:53 EDT 2007


On Mar 23, 1:25 pm, Steve Holden <s... at holdenweb.com> wrote:
> Carsten Haese wrote:
> > On Fri, 2007-03-23 at 09:54 -0700, gburde... 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- Hide quoted text -
>
> - Show quoted text -

This list might be even simpler to follow:

l = [
     'mycommand',
     '-S', s_switch,
     '-T', t_switch,
     '-f1', filename1,
     '-f2', filename2,
     '>', log_filename
    ]
cmd = " ".join(l)

(and I'm glad I'm not the only one who uses 'l' for a scratch list
variable...)

-- Paul





More information about the Python-list mailing list