Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Browse files

Now use `subprocess.Popen` instead of the deprecated os.popen3 to iss…

…ue PostGIS test database creation commands.

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit d982edff4b6b3c2349e4d3b7293b747beeab936a 1 parent c08e0ef
@jbronn jbronn authored
Showing with 12 additions and 6 deletions.
  1. +12 −6 django/contrib/gis/db/backend/postgis/
18 django/contrib/gis/db/backend/postgis/
@@ -1,4 +1,5 @@
import os, re, sys
+from subprocess import Popen, PIPE
from django.conf import settings
from import call_command
@@ -6,12 +7,17 @@
from django.db.backends.creation import TEST_DATABASE_PREFIX
def getstatusoutput(cmd):
- "A simpler version of getstatusoutput that works on win32 platforms."
- stdin, stdout, stderr = os.popen3(cmd)
- output =
- if output.endswith('\n'): output = output[:-1]
- status = stdin.close()
- return status, output
+ """
+ Executes a shell command on the platform using subprocess.Popen and
+ return a tuple of the status and stdout output.
+ """
+ # Set stdout and stderr to PIPE because we want to capture stdout and
+ # prevent stderr from displaying.
+ p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
+ # We use p.communicate() instead of p.wait() to avoid deadlocks if the
+ # output buffers exceed POSIX buffer size.
+ stdout, stderr = p.communicate()
+ return p.returncode, stdout.strip()
def create_lang(db_name, verbosity=1):
"Sets up the pl/pgsql language on the given database."

0 comments on commit d982edf

Please sign in to comment.
Something went wrong with that request. Please try again.