我使用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'有两个监听端口:
如果我运行简单的shell命令os.system(“ls -l”)等,那么效果很好。
如果我像普通的python脚本一样运行,而不是作为Web服务器运行,那么效果很好。
尝试启动其他一些服务也无法正常工作。 我尝试用try catch,catch部分没有被执行。 浏览器永远处于连接/接收状态。
对此有任何帮助吗?
答案 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()