Peter Otten wrote:

import subprocess

def convert(width=5, height=30, colors=['#abcdef', '#456789'],
            filename="tmp/image with space in its name.png"):
    lookup = locals()
    assert all("\n" not in str(s) for s in lookup.values())
    subprocess.call("""\
convert
-size
{width}x{height}
gradient:{colors[0]}-{colors[1]}
{filename}""".format(**lookup).splitlines())

convert()

Peter

Thank you. It works. Now I need to understand why and am able to follow what you are doing part of the way:

1. Assign default values in the function definition.

2. Store the variables existing in the local namespace in the list lookup.

3. Assert that there are no newlines in the values in lookup converted to strings. (Why? Is this because of splitlines() later on?)

4. Assemble a string (array?) for the subprocess.call argument using the format string syntax (section 8.1.3 et seq. of the Python documentation for 2.6.4). Your example works with default option of shell=False for subprocess.call().

5. I am unable to decipher how you got to format(**lookup).splitlines())
especially the **prefix part, although I guess that splitlines() is dishing out the arguments one by one from each line in the subprocess.call argument.

Any correction of (1) to (4) and an explanation of (5) would be most appreciated.

All in all, your code is a magnificent example of wrapping the function within python. This is the first time I have seen something like this.

Thank you very much.

Chandra
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to