Python を使用して Debian システムでホスト名を設定する方法をスクリプト化しています。私は成功します:
- arg1 から新しいホスト名を取得するか、それを変数の値として定義した場合
- 現在のホスト名を取得する
/etc/hostname
変数から新しいホスト名を開いてファイルに書き込み、その後それを閉じます。/etc/hosts
読み取りまたは書き込み用に開く
そこで行き詰まります。実行する文字列として読み取ろうとしましたstr.replace(oldname, newname)
が、ファイルの内容を に変換しないと問題が発生しますstr
。それをすると、ファイルを書き込めなくなります。
または、試してみましre.sub()
たが、同様に結果を に書き込むのに問題があります/etc/hosts
。
フィードバックをお待ちしております。
私は例を調査し、 CentOS の解決策を見つけました。そこから学びましたが、問題の解決策がわかりません。
Bash は、この仕事に最適なツールです。連結しないと3行。ただし、Python ソリューションが必要です。
上記のコードは、ホスト名に書き込みます: 私はそれを処理しました。同じ戦略がホストで機能することはわかりません。
ここに作業コードがあります。提案に感謝します。それらを考慮する必要があります。結論も省略しました。しかし、これは狭義に定義された仕事をします:
#!/usr/bin/python -ex
import os, sys, syslog
#Customize
hosts_file = '/etc/hosts'
hostname_file = '/etc/hostname'
#Check for root
if not os.geteuid()==0:
sys.exit("\nOnly root can run this script\n")
if len(sys.argv) != 2:
print "Usage: "+sys.argv[0]+" new_hostname"
sys.exit(1)
new_hostname = sys.argv[1]
print 'New Hostname: ' +new_hostname
#get old hostname
f_hostname = open('/etc/hostname', 'r')
old_hostname = f_hostname.readline()
old_hostname = old_hostname.replace('/n','')
f_hostname.close()
print 'Old Hostname: ' +old_hostname
#open hosts configuration
f_hosts_file = open(hosts_file, 'r')
set_host = f_hosts_file.read()
f_hosts_file.close()
pointer_hostname = set_host.find(old_hostname)
#replace hostname in hosts_file
set_host = set_host.replace(old_hostname, new_hostname)
set_host_file = open(hosts_file,'w')
set_host_file.seek(pointer_hostname)
set_host_file.write(set_host)
set_host_file.close()
#insert code to handle /etc/hostname
#change this system hostname
os.system('/bin/hostname '+new_hostname)
#write syslog
syslog.syslog('CP : Change Server Hostname')
次に、古いホスト名があった場所に新しいホスト名を書き込む/置き換える単一の関数を作成したいと考えています。