getting a string as the return value from a system command

Robert Kern robert.kern at gmail.com
Sat Apr 17 18:24:08 CEST 2010


On 2010-04-17 01:49 , CHEN Guang wrote:
>  > Catherine Moroney wrote:
>  >> Hello,
>  >>
>  >> I want to call a system command (such as uname) that returns a string,
>  >> and then store that output in a string variable in my python program.
>  >>
>  >> What is the recommended/most-concise way of doing this?
>  >>
>  >> I could always create a temporary file, call the "subprocess.Popen"
>  >> module with the temporary file as the stdout argument, and then
>  >> re-open that temporary file and read in its contents. This seems
>  >> to be awfully long way of doing this, and I was wondering about
>  >> alternate ways of accomplishing this task.
>  >>
>  >> In pseudocode, I would like to be able to do something like:
>  >> hosti nfo = subprocess.Popen("uname -srvi") and have hostinfo
>  >> be a string containing the result of issuing the uname command.
>  >>
>  >> Thanks for any tips,
>  >>
>  >> Catherine
>  >
>  > import os
>  > txt = os.popen("uname -srvi")
>  > hostinfo = txt.readline()
>  >
>  > Or if the command outputs a number of lines (such as 'ls'),
>  > use txt.readlines() to put the result into a list of strings.
>  >
>  > -=- Larry -=-
>  >
> os.popen3() gives not only result but also error prompt (in case an
> error or warning happens)
> stdin,stdout,stderr = os.popen3('uname -srvi')
> resultText = stdout.read()
> errorText = stderr.read()
> For more examples of os.popen3() please look at source code of PythoidC
> (http://pythoidc.googlecode.com or http://pythoidc.sf.net )

The subprocess module is the preferred choice over either of those functions.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list