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