【发布时间】:2012-11-13 18:02:23
【问题描述】:
我正在编写一种在 Debian 系统上使用 Python 设置主机名的方法。我成功了:
- 从 arg1 获取新主机名,或者如果我将其定义为变量的值
- 获取当前主机名
- 打开
/etc/hostname并将变量中的新主机名写入文件,然后将其关闭。 - 打开
/etc/hosts进行阅读或写作
我被困在那里。我尝试将它作为字符串读取以执行str.replace(oldname, newname),但除非我将文件内容转换为str,否则会遇到麻烦。如果我这样做,我将无法写入文件。
或者,我尝试了re.sub(),但同样无法将结果写入/etc/hosts。
感谢任何反馈。
我做了研究示例,发现a solution for 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')
然后我希望编写一个函数来写入/替换旧主机名所在的新主机名。
【问题讨论】:
-
这些与 Linux 中操作系统配置文件的交互对于使用
sed的bash(shell)脚本来说是一个很好的用例,如果您想尝试的话。您遇到了什么错误,或者应该是什么没有发生? -
为什么不使用主机名可执行文件?
-
您可能必须读取所有文件内容并替换您想要的位。应该没那么难。
标签: python ubuntu debian hostname