改进更新apachedocumentr的Python脚本

2024-09-30 02:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我厌倦了在Apache中修改DocumentRoot所需的所有步骤。我试图用下面的Python脚本来简化这个过程。。。在

#!/usr/bin/python

import sys, re

if len(sys.argv) == 2:
 f = open('/tmp/apachecdr', 'w')
 f.write(open('/etc/apache2/httpd.conf').read())

 f = open('/tmp/apachecdr', 'r')
 r = re.sub('DocumentRoot "(.*?)"', 
  'DocumentRoot "' + sys.argv[1] + '"', 
  f.read())
 f = open('/etc/apache2/httpd.conf', 'w')
 f.write(r)
else:
 print "Please supply the new DocumentRoot path."

我将其保存为/usr/bin/apachecdr,这样我就可以简单地打开shell和“sudo apachecdr/new/documentroot/path”,然后用apachectl重新启动。我的问题是你会怎么写这个?在

这是我第一次发表关于堆栈溢出的文章(我是Python新手),所以请让我知道这是否是一个不够具体的问题。在


Tags: rereadbinusrconfsysetcopen
3条回答

你做了大量的档案工作却没有什么好处。为什么要编写/tmp/apachecdr,然后立即再次读取它?如果你在复制httpd.conf作为备份,shutil模块提供复制文件的功能:

#!/usr/bin/python

import shutil, sys, re

HTTPD_CONF = '/etc/apache2/httpd.conf'
BACKUP = '/tmp/apachecdr'
if len(sys.argv) == 2:
 shutil.copyfile(BACKUP, HTTPD_CONF)
 conf = open(HTTPD_CONF).read()

 new_conf = re.sub('DocumentRoot "(.*?)"', 
  'DocumentRoot "' + sys.argv[1] + '"', 
  conf)
 open(HTTPD_CONF, 'w').write(new_conf)
else:
 print "Please supply the new DocumentRoot path."

谢谢你们的回答。奈德,我正希望你能这么说。我这样做的原因很简单,因为我不知道更好。谢谢你提供你的代码,这正是我要找的。在

顺便说一句,发生错误的原因是第8行的“BACKUP”和“HTTPD_CONF”是颠倒的。换言之,换个角度”shutil.copyfile文件(备份,HTTPD_CONF)“到”shutil.copyfile文件(HTTPD_CONF,BACKUP)”内德脚本的第8行。在

再次感谢各位!这是一个伟大的第一次经验张贴在这个网站上。在

一般来说,Python程序员更喜欢显式的而不是隐式的(参见http://www.python.org/dev/peps/pep-0020/)。 考虑到这一点,你可能需要重写这一行

f.write(open('/etc/apache2/httpd.conf').read())

收件人:

^{pr2}$

另一个建议是增加一些错误检查。例如,检查文件/etc/apache2/httpd.conf存在。在

通常情况下,在打开的行周围使用try/except,但是如果要使用组合的read和write命令,可以使用操作系统统计为了检查。在

示例

import os
try:
  os.stat('/etc/apache2/httpd.conf) 
except OSError:
  print "/etc/apache2/httpd.conf does not exist"
  return #will exit the program

相关问题 更多 >

    热门问题