How do you conver output of "popen('ls')" to a list?

Grant Edwards grante at
Wed Feb 20 21:56:18 EST 2002

In article <mailman.1014253235.29718.python-list at>, Neil Schemenauer wrote:
> husam wrote:

>> os.listdir('.') gets you all the files in the '.' dircetory. This want
>> work if i want to process some selected files. In contrast to this,
>> "os.popen() allows you to pass arguments like "ls *txt" to retrieve only
>> *.txt files.
> Sorry, that's still not a good argument for two forks and god knows how
> any system calls.  Try this:
>     import glob
>     txt_files = glob.glob("*txt")

In these days of 1.whatever GHz processors, I doubt that a
couple fork/exec combinations matters a lot in most situations.
But, os.system() calls the shell. The shell does god-knows-what
to the arguments, then looks god-knows-where for the
executable.  You can lessen these problems by specifying an
absolute path and quoting the arguments -- though quoting them
properly isn't a trivial problem.

Don't even ask what happens when the wrong shell gets chosen to
start with.  :)

Maybe I'm a bit too paranoid, but using os.system() seems to me
to be begging for problems down the road.  If you explicitly
want shell-command-line semantics then it's cool, but most of
the places I see it used (including in my code) there are more
robust solutions.

Modules to look in when you're tempted to do an os.system():


If all else fails, os.spawn or os.popen2 are often better
choices than os.system.

I'm done preaching now...

Grant Edwards                   grante             Yow!  Gibble, Gobble, we
                                  at               ACCEPT YOU...

More information about the Python-list mailing list