f = os.popen("./cgi_script.cgi > /dev/null", "w") f.write(postBody) f.flush() f.close()
As os.popen() is deprecated now (I know, it's a very old codebase that started with Python 1.5) I've moved to new subprocess module:
fNull = file("/dev/null", "w") p = subprocess.Popen("./cgi_script.cgi", shell=False, bufsize=1024, stdin = subprocess.PIPE, stdout = fNull) fw = p.stdin fw.write(postBody) fw.flush() fw.close() del p
As you can see it's more verbose now but I've eliminated shell (slightly faster operation).
Some notes found during migration:
- without "del p" process may be not terminated causing problems with DB state (CGI proces updates database and test checks this state later)
- I/O configuration is more flexible than os.popen() – you can make pipes more easily