469,621 Members | 1,802 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,621 developers. It's quick & easy.

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?

Mar 23 '07 #1
6 2734
On Fri, 2007-03-23 at 09:54 -0700, gb*******@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
Mar 23 '07 #2
Carsten Haese wrote:
On Fri, 2007-03-23 at 09:54 -0700, gb*******@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

Mar 23 '07 #3
On Mar 23, 1:25 pm, Steve Holden <s...@holdenweb.comwrote:
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
Mar 24 '07 #4
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.

Mar 24 '07 #5
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
Mar 24 '07 #6
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

Mar 25 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

37 posts views Thread by ajikoe | last post: by
4 posts views Thread by Frank Jona | last post: by
5 posts views Thread by bobwansink | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.