Python subprocess Popen.communicate() equivalent to Popen.stdout.read()?

Posted by Christophe on Stack Overflow See other posts from Stack Overflow or by Christophe
Published on 2012-10-18T22:59:05Z Indexed on 2012/10/18 23:00 UTC
Read the original article Hit count: 318

Filed under:
|
|
|
|

Very specific question (I hope): What are the differences between the following three codes?

(I expect it to be only that the first does not wait for the child process to be finished, while the second and third ones do. But I need to be sure this is the only difference...)

I also welcome other remarks/suggestions (though I'm already well aware of the shell=True dangers and cross-platform limitations)

Note that I already read Python subprocess interaction, why does my process work with Popen.communicate, but not Popen.stdout.read()? and that I do not want/need to interact with the program after.

Also note that I already read Alternatives to Python Popen.communicate() memory limitations? but that I didn't really get it...

First code:

from subprocess import Popen, PIPE

def exe_f(command='ls -l', shell=True):
    "Function to execute a command and return stuff"

    process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)

    stdout = process.stdout.read()
    stderr = process.stderr.read()

    return process, stderr, stdout

Second code:

from subprocess import Popen, PIPE
from subprocess import communicate

def exe_f(command='ls -l', shell=True):
    "Function to execute a command and return stuff"

    process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)

    (stdout, stderr) = process.communicate()

    return process, stderr, stdout

Third code:

from subprocess import Popen, PIPE
from subprocess import wait

def exe_f(command='ls -l', shell=True):
    "Function to execute a command and return stuff"

    process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)

    code   = process.wait()
    stdout = process.stdout.read()
    stderr = process.stderr.read()

    return process, stderr, stdout

Thanks.

© Stack Overflow or respective owner

Related posts about python

Related posts about subprocess