Executing a command from within python using the subprocess module

John Posner jjposner at optimum.net
Mon Feb 15 16:59:05 CET 2010


On 2/15/2010 7:35 AM, R (Chandra) Chandrasekhar wrote:
> Dear Folks,
>
> I want to execute a command from within python using the subprocess module.
>
> Coming from a Perl background, I thought I could use variable
> interpolation in strings, but found that this is neither supported

Yes, it is: see the use of string.Template below.

> ... nor
> the Python way.

That right -- it isn't the Python way. Python offers two basic 
alternatives. Alf already presented the use of the "new" format() method 
of string objects. I think "traditional" Python string formatting might 
be what you want in this case:

   colors = ['#abcdef', '#456789']
   format_string = "convert -size 5x30 gradient:%s-%s /tmp/image.png"
   cmd_string = format_string % tuple(colors)

... or better, by making *colors* a tuple instead of a list ...

   colors = ('#abcdef', '#456789')
   format_string = "convert -size 5x30 gradient:%s-%s /tmp/image.png"
   cmd_string = format_string % colors

As Peter demonstrated, you need to use split() on *cmd_string* when you 
send the command to subprocess.call().

Now if you *really* miss using Perl, try this:

   c1, c2 = ('#abcdef', '#456789')
   template = string.Template(
               "convert -size 5x30 gradient:$c1-$c2 /tmp/image.png")
   cmd_string = template.substitute(locals())

Not worth the trouble, IMHO.

Refs:

http://www.python.org/doc/2.5.2/lib/typesseq-strings.html
http://www.python.org/doc/2.5.2/lib/node40.html

HTH,
John



More information about the Python-list mailing list