Wie Ersetze ich ein hostname in /etc/hosts auf dem debian mit Python

Ich bin scripting eine Möglichkeit zum festlegen von hostname auf einem Debian-system mit Python. Ich gelingt:

  • den neuen Hostnamen von arg1, oder wenn ich es zu definieren, wie der Wert einer Variablen
  • Holen Sie sich die aktuellen Hostnamen
  • öffnen /etc/hostname und schreiben Sie den neuen Hostnamen aus der variable in die Datei und danach schließen Sie es.
  • öffnen /etc/hosts zum Lesen oder schreiben

Ich dort stecken. Ich habe versucht, es zu Lesen, wie eine Zeichenfolge zu tun str.replace(oldname, newname), aber in Schwierigkeiten geraten, es sei denn, ich drehe den Inhalt der Datei in str. Wenn ich das mache, ich kann nicht schreiben, die Datei.

Alternativ habe ich versucht re.sub() werden, aber ebenso Probleme haben, schreiben Sie die Ergebnisse auf /etc/hosts.

Jedes feedback wird sehr geschätzt.

Ich recherchierte Beispiele und gefunden eine Lösung für CentOS. Ich habe von ihm gelernt, aber nicht sehen, eine Lösung für mein problem.

Bash ist absolut das richtige tool für diesen job. 3 Zeilen, wenn ich nicht verketten. Ich brauche eine python-Lösung, jedoch.

Den code oben zitiert schreibt hostname: habe ich das gekümmert. Ich bin nicht der Suche nach, dass die gleiche Strategie funktioniert mit den hosts.

Hier funktioniert der code, vielen Dank für die Anregungen. Sie müssen berücksichtigt werden. Ich habe auch aufgehört die Schlussfolgerung. Aber dies bedeutet das eine eng definierte Aufgabe:

#!/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')

Ich dann hoffentlich schreiben Sie eine einzige Funktion zu schreiben/ersetzen Sie den neuen Hostnamen ein, wo der alte hostname war.

  • Poste deinen code bitte.
  • Diese Interaktionen mit Betriebssystem Konfigurations-Dateien in Linux sind ein guter Anwendungsfall für bash (shell -) Skripte mit sed im Fall, dass Sie wollen, um zu versuchen. Welche Fehler sind Sie immer, oder was nicht geschehen sollte?
  • Warum nicht verwenden Sie die ausführbare Datei hostname?
  • Haben Sie vielleicht zu Lesen, der Inhalt der Datei und ersetzen Sie das bit, die Sie wollen. Sollte nicht so schwer sein.
InformationsquelleAutor user82345 | 2012-11-13
Schreibe einen Kommentar