--- Pkg.py +++ Pkg.py @@ -13,13 +13,18 @@ import rpm import os.path import stat import commands -import popen2 import re import string import tempfile import types import sys +# popen2 is deprecated with 2.6 and newer +if sys.version_info[0] > 2 or sys.version_info[1] >= 4: + import subprocess +else: + import popen2 + from Filter import printWarning RPMFILE_CONFIG=(1 << 0) @@ -93,13 +98,23 @@ def substitute_shell_vars(val, script): def getstatusoutput(cmd, stdoutonly=0): '''A version of commands.getstatusoutput() which can take cmd as a sequence, thus making it potentially more secure. See popen2.''' - if stdoutonly: - proc = popen2.Popen3(cmd) + if sys.version_info[0] > 2 or sys.version_info[1] >= 4: + if stdoutonly: + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True) + else: + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) + + text = proc.stdout.read() + sts = proc.wait() else: - proc = popen2.Popen4(cmd) - proc.tochild.close() - text = proc.fromchild.read() - sts = proc.wait() + if stdoutonly: + proc = popen2.Popen3(cmd) + else: + proc = popen2.Popen4(cmd) + proc.tochild.close() + text = proc.fromchild.read() + sts = proc.wait() + if sts is None: sts = 0 if text[-1:] == '\n': text = text[:-1] return sts, text