我在Python上有点新手,但是正在测试我在Ubuntu上学到的一些东西。 基本上,这个脚本应该设置你的TCP / IP配置,然后重启网络守护进程并显示更改。
这是整个剧本:
#!/usr/bin/env python
import commands
import os
import sys
euid = os.geteuid()
if euid != 0:
print "Script not started as root. Running sudo.."
args = ['sudo', sys.executable] + sys.argv + [os.environ]
# the next line replaces the currently-running process with the sudo
os.execlpe('sudo', *args)
print 'Running. Your euid is', euid
print "IP"
IP = raw_input(">>")
print "Gateway"
PE = raw_input(">>")
ifconfig = commands.getoutput("ifconfig")
interfaz = ifconfig[0:5]
ArchivoInterfaces = open("/etc/network/interfaces", "w")
ArchivoInterfaces.write("#auto lo\n#iface lo inet loopback\nauto %s\niface %sinet static\naddress %s\ngateway %s\nnetmask 255.255.255.0"%(interfaz, interfaz, IP, PE))
ArchivoInterfaces.close()
ArchivoResolv = open("/etc/resolv.conf", "w")
ArchivoResolv.write("# Generated by NetworkManager\ndomain localdomain\nsearch localdomain\nnameserver 8.8.8.8\nnameserver 8.8.4.4")
ArchivoResolv.close()
os.execlpe('/etc/init.d/networking', "test","restart", os.environ)
print "Todo esta correcto, su IP ahora es %s" %(IP)
fin = raw_input("write d and press enter to show the changes, or press enter to exit.")
if fin == "d":
ArchivoResolv = open("/etc/resolv.conf")
ArchivoInterfaces = open("/etc/network/interfaces")
ifconfig2 = commands.getoutput("ifconfig")
print "ARCHIVO resolv.conf\n"+ArchivoResolv.read()+"\n\n"+"ARCHIVO interfaces\n"+ArchivoInterfaces.read()+"\n\n"+"RESULTADO DE \"ifconfig\"\n"+ifconfig2
fin = raw_input("Presiona ENTER para salir.")
不幸的是,它一直停留在这条线上 - 我不确定原因:
os.execlpe('/etc/init.d/networking', "test","restart", os.environ)
到达此位置后,脚本将运行重新启动,然后退出。
我很想让它运行脚本的最后一部分,这样我就可以看到发生了什么变化,但我无法做到。有什么想法吗?
答案 0 :(得分:1)
因为所有exec
系列函数都是通过将当前进程替换为您执行的进程来工作的。
如果您只想运行外部命令,请改用spawn
函数。 (在这种情况下,os.spawnlpe
几乎是替代品。)
答案 1 :(得分:0)
os.execlpe
(以及类似的os.exec *函数)替换当前进程:
这些功能都执行新程序,替换当前进程; 他们不会回来。