how to change os.popen4 to subprocess

Prasad, Ramit ramit.prasad at jpmorgan.com
Tue Oct 30 10:47:52 EDT 2012


Replying to skyworld because I could not find the original message
from MRAB.

skyworld wrote:
> On Oct 27, 11:02 am, MRAB <pyt... at mrabarnett.plus.com> wrote:
> > On 2012-10-27 03:28, skyworld wrote:> Hi,
> >
> > > I'm new to python and I'm trying to porting some scripts from v0.96 to
> > > v2.0.1. A piece of code is like this:
> >
> > > cmd_h = os.popen4(env['SYSCMDLINE'])[1]
> >
> > > the system indicates the popen4 is deprecated and suggest to use
> > > subprocess. Can anybody tell me how to use subprocess in this case?
> > > and what does "[1]" here means?
> >
> > os.popen4 returns a tuple of (child_stdin, child_stdout_and_stderr).
> > The [1] gets the child_stdout_and_stderr member.
> >
> > Using the subprocess module:
> >
> > # Untested!
> > cmd_h = subprocess.Popen(env['SYSCMDLINE'], stdout=subprocess.PIPE,
> > stderr=subprocess.STDOUT, shell=True).stdout
> >
> > Explanation:
> >
> > The command line: env['SYSCMDLINE']
> >
> > Return stdout: stdout=subprocess.PIPE
> >
> > stderr should be combined with stdout: stderr=subprocess.STDOUT
> >
> > Let the shell parse the command line: shell=True
> 
> thanks
> --

I thought the usage of shell=True is usually discouraged? The 
subprocess documentation[0] should be helpful to figure it out.
"""
Warning: Invoking the system shell with shell=True can be a security 
hazard if combined with untrusted input. See the warning under 
Frequently Used Arguments for details.
"""

[0] http://docs.python.org/2/library/subprocess.html 


Ramit


This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  



More information about the Python-list mailing list