os.popen output different from native shell output
Nobody
nobody at nowhere.com
Tue Aug 25 09:16:23 EDT 2009
On Tue, 25 Aug 2009 01:36:08 -0700, nickname wrote:
> I am a relative newbie to python, I am using os.popen to run an
> ls command. The output that I get using the read() function is
> different in look and feel from when I run the ls command natively
> from the shell (not via python).
As others have pointed out, the default behaviour of ls is different if
its output is a terminal.
> Is there an easy way to "mirror" the output. When python displays the
> output, how can it tell the bash shell that some of the entries are
> directories and they should appear blue on the bash shell, and that
> everything should not be appearing on 1 column only.
You can get the terminal-style behaviour even when using a pipe with:
ls -x --color
But why are you reading this information into Python then writing it
back out to the terminal?
If you're planning on processing the output within Python, both the
multi-column format and the escape sequences used for colour will make
such processing awkward.
If you want to enumerate the contents of a directory within Python, use
os.listdir().
If you want to generate coloured output, use the curses module, e.g.:
#!/usr/bin/env python
import sys
import curses
curses.setupterm()
setaf = curses.tigetstr('setaf') or ""
setab = curses.tigetstr('setab') or ""
origp = curses.tigetstr('op') or ""
def fg(c):
sys.stdout.write(curses.tparm(setaf, c))
def bg(c):
sys.stdout.write(curses.tparm(setab, c))
def orig():
sys.stdout.write(origp)
# example
bg(curses.COLOR_BLUE)
fg(curses.COLOR_YELLOW)
print "hello, world"
orig()
More information about the Python-list
mailing list