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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to