Python BaseHTTP在启动nginx或其他服务时受到攻击

时间:2011-12-15 13:40:47

标签: python

我使用BaseHTTP非常简单。如果我使用错了,请提出建议。

if self.path.endswith("nginxstart"):
    xxxxxx 
    status=os.system("/home/karthik/nginx/nginx-1.0.4/sbin/nginx");  #tried ls -l and works
    self.wfile.write("nginx restarted")

nginx启动但是在我杀死python服务器之前不会将“nginx restarted”写入浏览器。 当我做netstat -anp | grep'nginx的pid'有两个监听端口:

  1. python服务器正在侦听(端口8000:我已经杀了)
  2. 应该在哪个nginx上运行。
  3. 如果我运行简单的shell命令os.system(“ls -l”)等,那么效果很好。

    如果我像普通的python脚本一样运行,而不是作为Web服务器运行,那么效果很好。

    尝试启动其他一些服务也无法正常工作。 我尝试用try catch,catch部分没有被执行。 浏览器永远处于连接/接收状态。

    对此有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

您的代码被卡住了,因为os.system阻塞直到命令完成。因此,如果nginx命令不是后台,则该过程不会结束,并且您的代码将被卡住。

另一种方法是使用subprocess模块:

from subprocess import Popen

# start a new command
cmd = Popen("/home/.../nginx", shell=True)

# you can regulary check if the command is still running with:
cmd.poll()
if cmd.returncode is None:
    print "process is still running !"
else:
    print "process exited with code %d" % cmd.returncode

# or even kill it
cmd.kill()