Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Multi-line strings with formatting

Reply
Thread Tools

Multi-line strings with formatting

 
 
gburdell1@gmail.com
Guest
Posts: n/a
 
      03-23-2007
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?

 
Reply With Quote
 
 
 
 
Carsten Haese
Guest
Posts: n/a
 
      03-23-2007
On Fri, 2007-03-23 at 09:54 -0700, http://www.velocityreviews.com/forums/(E-Mail Removed) 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


 
Reply With Quote
 
 
 
 
Steve Holden
Guest
Posts: n/a
 
      03-23-2007
Carsten Haese wrote:
> On Fri, 2007-03-23 at 09:54 -0700, (E-Mail Removed) 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

 
Reply With Quote
 
Paul McGuire
Guest
Posts: n/a
 
      03-24-2007
On Mar 23, 1:25 pm, Steve Holden <(E-Mail Removed)> wrote:
> Carsten Haese wrote:
> > On Fri, 2007-03-23 at 09:54 -0700, (E-Mail Removed) 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


 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      03-24-2007
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.

 
Reply With Quote
 
Steven Bethard
Guest
Posts: n/a
 
      03-24-2007
On Fri, 2007-03-23 at 09:54 -0700, (E-Mail Removed) 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
 
Reply With Quote
 
Steve Holden
Guest
Posts: n/a
 
      03-25-2007
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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Strings, Strings and Damned Strings Ben C Programming 14 06-24-2006 05:09 AM
Formatting Strings Guadala Harry ASP .Net 2 10-28-2004 06:54 PM
Need formatting options menu for formatting hard drive Mark T. Computer Support 3 11-24-2003 11:50 PM
formatting strings Perecli Manole ASP .Net 3 10-24-2003 05:45 AM
Question on formatting Strings Joona I Palaste Java 3 10-20-2003 12:05 AM



Advertisments