using subprocess module in Python CGI
Matt Nordhoff
mnordhoff at mattnordhoff.com
Tue Dec 23 19:54:32 EST 2008
ANURAG BAGARIA wrote:
> Hello,
>
> I am a Python Newbie and would like to call a short python script via
> browser using a CGI script, but initially I am trying to call the same
> python script directly through python command line. The script intends
> to perform a few command line in a pipe and I have written the script (a
> short one) as follows.
>
> #!/usr/bin/python
>
> import cgi, string, os, sys, cgitb, commands, subprocess
> import posixpath, macpath
> #file = "x.tar.gz"
> #comd = "tar -xf %s" % (file)
> #os.system(comd)
> #commands.getoutput('tar -xf x.tar.gz | cd demo; cp README ../')
> comd = [\
> "tar -xf x.tar.gz", \
> "cd demo", \
> "cp README ../", \
> ]
That's not how subprocess.call() works. You're trying to run an
executable called "tar -xf x.tar.gz", passing it the arguments "cd demo"
and "cp README ../".
> outFile = os.path.join(os.curdir, "output.log")
> outptr = file(outFile, "w")
> errFile = os.path.join(os.curdir, "error.log")
> errptr = file(errFile, "w")
> retval = subprocess.call(comd, 0, None, None, outptr, errptr)
> errptr.close()
> outptr.close()
> if not retval == 0:
> errptr = file(errFile, "r")
> errData = errptr.read()
> errptr.close()
> raise Exception("Error executing command: " + repr(errData))
>
>
> but after trying to execute this independently, I get the following
> error which I am unable to interpret :
>
> Traceback (most recent call last):
> File "process.py", line 18, in <module>
> retval = subprocess.call(comd, 0, None, None, outptr, errptr)
> File "/usr/lib/python2.5/subprocess.py", line 443, in call
> return Popen(*popenargs, **kwargs).wait()
> File "/usr/lib/python2.5/subprocess.py", line 593, in __init__
> errread, errwrite)
> File "/usr/lib/python2.5/subprocess.py", line 1135, in _execute_child
> raise child_exception
>
>
> Could someone suggest where am I going wrong and if corrected, what is
> the probability of this script being compatible with being called
> through the browser. Thanking you people in advance.
Well, you'd need to output something, but otherwise, sure, why not?
print "Content-Type: text/html"
print
print "<html>...</html>"
> Regards.
Why do you even need to use subprocess to do this? All it's doing is
extracting the README file from a tarball, right? You can use the
tarfile module for that.
<http://docs.python.org/library/tarfile.html>
--
More information about the Python-list
mailing list