「接続が拒否」、およびこのプロセスが見つからなかった場合は、それを開始します。プロセス自体はwebserver(web.pyに基づいています)です。プロセスが実行されていることを確認した後、私はそのプロセスにURLリクエストを試みます。アイデアは、基本的に、私は別のポートをリスニングローカルウェブサーバへのクエリをリダイレクトしたい、私のCGIスクリプトの要求者にこの要求の結果をリダイレクトすることです。私はCGI要求を使用していない、シェルから、(findImgServerProcessがTrueを返す)最初のサーバーを起動している場合は、CGIスクリプト内からurlopen呼び出し、私はプロセスがアクティブであるかどうかを確認するのpythonのcgiスクリプトを持っているエラー
このコードは正常に動作します。私は以下のCGIスクリプトによるプロセスを開始しようとした場合でも、私は、接続が拒否されていることを例外をスローurllib2.urlopen呼び出し、限り入手できます。 私はなぜ理解していませんか? プロセスのリスト(r
をfindImgServerProcess()
)に印刷すると、そのプロセスが表示されますが、なぜurllib2.urlopenは例外をスローしますか?私はsuexecを使うようにapache2ウェブサーバを設定しました。
ここでは、コードです:
#!/usr/bin/python
import cgi, cgitb
cgitb.enable()
import os, re
import sys
import subprocess
import urllib2
urlbase = "http://localhost:8080/getimage"
imgserver = "/home/martin/public_html/cgi-bin/stlimgservermirror.py" # this is based on web.py
def findImgServerProcess():
r = subprocess.Popen(["ps", "aux"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]
return re.match(".*%s" % os.path.split(imgserver)[-1], r, re.DOTALL)
def ensureImgServerProcess():
if findImgServerProcess():
return True
os.environ['LD_LIBRARY_PATH'] = '/home/martin/lib'
fout = open("/dev/null", "w")
ferr = fout
subprocess.Popen([sys.executable, imgserver], stdout=fout, stderr=subprocess.STDOUT)
# now try and find the process
return findImgServerProcess() != None
def main():
if not ensureImgServerProcess():
print "Content-type: text/plain\n"
print "image server down!"
return
form = cgi.FieldStorage()
if form.has_key("debug"):
print "Content-type: text/plain\n"
print os.environ['QUERY_STRING']
else:
try:
img = urllib2.urlopen("%s?%s" % (urlbase, os.environ['QUERY_STRING'])).read()
except Exception, e:
print "Content-type: text/plain\n"
print e
sys.exit()
print "Content-type: image/png\n"
print img
if __name__ == "__main__":
main()