0

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として保存したので、シェルを開いて「sudo apachecdr / new / documentroot / path」を実行し、apachectlで再起動できます。私の質問は、これをどのように書くかです。

Stack Overflowに投稿するのは初めてです(Pythonは初めてです)ので、これが質問として十分具体的でない場合はお知らせください。

4

3 に答える 3

0

多くのファイル作業を行っているのに、あまりメリットがありません。/tmp/apachecdr と書いてすぐにまた読むのはなぜですか? httpd.conf をバックアップとして tmp ディレクトリにコピーする場合、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."
于 2009-09-11T01:16:56.143 に答える
0

お二方、ご回答ありがとうございます。ネッド、私はあなたがそのようなことを言うことを望んでいました. なぜそんなことをしていたのかというと、単純によくわからなかったからです。コードを提供していただきありがとうございます。まさに私が探していたものでした。

ところで、8 行目で「BACKUP」と「HTTPD_CONF」が逆になっているため、エラーが発生しています。ネッドの脚本。

みんなありがとう!これは、このサイトに投稿する初めての素晴らしい経験でした。

于 2009-09-12T00:44:51.817 に答える
0

一般に、Python プログラマーは暗黙的よりも明示的を好みます ( http://www.python.org/dev/peps/pep-0020/を参照)。それを念頭に置いて、この行を書き直すことができます

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

に:

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

もう 1 つの提案は、エラー チェックを追加することです。たとえば、ファイル /etc/apache2/httpd.conf が存在することを確認します。

通常、開いている行の周りで try/except を使用しますが、読み取りコマンドと書き込みコマンドを組み合わせて使用​​する場合は、チェックに os.stat を使用できます。

import os
try:
  os.stat('/etc/apache2/httpd.conf) 
except OSError:
  print "/etc/apache2/httpd.conf does not exist"
  return #will exit the program
于 2009-09-11T01:28:07.710 に答える