使用python安装nginx

肯定有小伙伴疑问哈,安装nginx仅仅需要几条命令如果只是单单安装简单使用os.system,os.Popen几乎就足以完成,那么为什么要写这么多呢。笔者在写这段代码的时候一个是想让代码更加美观,显得比较专业。另一方面无论安装什么,配置什么,仅仅在nginx_install_command()函数和main()函数中稍作修改就可以了。

#!/usr/bin/python3
# -*- conding: UTF-8 -*-
import subprocess
import os 
import shutil
import re
import tarfile
def execute_cmd(cmd):
p=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
  stdout,stderr=p.communicate()
  if p.returncode != 0 :
    return p.returncode, stderr
  return p.returncode, stdout

def unpackage_nginx(package,package_dir,data_dir):
  #unpackage_dir = os.path.splitext(package)[0]
  if os.path.isdir(package_dir):
    shutil.rmtree(package_dir)
  if os.path.isdir(data_dir):
    raise SystemExit("{0} Directory already exists".format(data_dir))
  t = tarfile.open(package,'r:gz')
  t.extractall('.')

def nginx_install_command(data_dir,package_dir):
  dep='yum -y install  gcc pcre-devel zlib-devel openssl openssl-devel'
  configure_path=os.path.join(package_dir,"configure")
  configure_cmd="{0} --prefix={1} && make && make install".format(configure_path,data_dir)
  return dep,configure_cmd

def start_nginx(cmd):
 returncode,out=execute_cmd(cmd)
 if returncode != 0:
   raise SystemExit('Execute {0} error{1}'.format(cmd,returncode))
 else:
   print('Execute command{0} successful'.format(cmd))

def main():
  package= 'nginx-1.2.9.tar.gz'
  cur_dir= os.path.abspath('.')
  #package_dir = os.path.join(cur_dir,package)
  re1=re.compile('[a-z]{2,10}-\d\.\d\.\d',re.UNICODE)
  package_name=re.findall(re1,package)
  package_dir=os.path.join(cur_dir,''.join(package_name))
  data_dir="/usr/local/nginx" 
  src_link=os.path.join(data_dir,"sbin/nginx")
  dec_link="/usr/sbin/nginx"
  
  if not os.path.exists(package):
    raise SystemExit("{$0} not found".format(package))
  
  unpackage_nginx(package,package_dir,data_dir)
  for cmd in nginx_install_command(data_dir,package_dir):
    os.chdir(package_dir)
    start_nginx(cmd)
    if not os.path.exists('/usr/sbin/nginx'):
       os.symlink(src_link,dec_link)
  print("Input command nginx to start services")
if __name__ == '__main__':
  main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值