Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Multi-line strings with formatting (http://www.velocityreviews.com/forums/t486638-multi-line-strings-with-formatting.html)

gburdell1@gmail.com 03-23-2007 04:54 PM

Multi-line strings with formatting
 
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)
)

but having the variables line-by-line as in the first example is so
much easier to edit, is it not?


Carsten Haese 03-23-2007 05:10 PM

Re: Multi-line strings with formatting
 
On Fri, 2007-03-23 at 09:54 -0700, gburdell1@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



Steve Holden 03-23-2007 06:25 PM

Re: Multi-line strings with formatting
 
Carsten Haese wrote:
> On Fri, 2007-03-23 at 09:54 -0700, gburdell1@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


Paul McGuire 03-24-2007 02:39 AM

Re: Multi-line strings with formatting
 
On Mar 23, 1:25 pm, Steve Holden <s...@holdenweb.com> wrote:
> Carsten Haese wrote:
> > On Fri, 2007-03-23 at 09:54 -0700, gburde...@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



Steven D'Aprano 03-24-2007 03:43 AM

Re: Multi-line strings with formatting
 
On Fri, 23 Mar 2007 19:39:53 -0700, Paul McGuire wrote:

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


Yes, and come the revolution, every last one of you will be down the salt
mines.

I don't mind using capital L as a variable, but l looks too much like I
and 1 in most typefaces. Capital O is another nasty one. I also try to
avoid using a as a variable name, because a is a definite article
in English (like "the") and that makes it difficult to write grammatical
sentences about what you're doing.


--
Steven.


Steven Bethard 03-24-2007 07:07 AM

Re: Multi-line strings with formatting
 
On Fri, 2007-03-23 at 09:54 -0700, gburde...@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) ?


Paul McGuire wrote:
> 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 if you use the subprocess module, you won't even need (or want) the
final join.

STeVe

Steve Holden 03-25-2007 09:14 PM

Re: Multi-line strings with formatting
 
Steven D'Aprano wrote:
> On Fri, 23 Mar 2007 19:39:53 -0700, Paul McGuire wrote:
>
>> (and I'm glad I'm not the only one who uses 'l' for a scratch list
>> variable...)

>
> Yes, and come the revolution, every last one of you will be down the salt
> mines.
>

Better that than up against the wall, I suppose.

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



All times are GMT. The time now is 01:45 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.