interpretation of special characters in Python

Peter Pearson ppearson at nowhere.invalid
Mon Jul 7 06:09:08 CEST 2008

On Sun, 06 Jul 2008 23:42:26 +0200, TP <Tribulations at Paralleles.invalid> wrote:
> $ python -c "print '\033[30;44m foo \033[0m'"
[writes an escape sequence to stdout]

> $ echo -e $esc$ColorBlackOnDarkblue foo $esc$ColorReset
[also writes an escape sequence to stdout]

> $ echo -n $esc$ColorBlackOnDarkblue foo $esc$ColorReset
> \033[30;44m foo \033[0m

[snip, shuffle]
> $ export esc="\033"
> $ export ColorBlackOnDarkblue="[30;44m"
> $ export ColorReset="[0m"
> import os
> Color = os.environ['ColorBlackOnDarkblue']
> ColorReset = os.environ['ColorReset']
> Esc = os.environ['esc']
> print '%s%s%s%s%s' % (Esc, Color, " foo ", Esc, ColorReset)
> $ python
> \033[30;44m foo \033[0m

The string "\033" is 4 characters long. Your shell variable
"esc" is 4 characters long.  Your Python program prints
those four characters.  You want it to re-interpret those 4
characters into a single escape character.

One of this group's regular participants can (I hope) tell
us three breathtakingly elegant ways to do that.  I'm sorry
I can't.

When you run echo, it recognizes the 4-character "esc" as a
convention for representing a single character, and performs
the re-interpretation for you.  When you tell python
"print '\033[30;44m foo \033[0m'", python interprets
the "\033" as a single character.

To email me, substitute nowhere->spamcop, invalid->net.

More information about the Python-list mailing list