脚本执行在os.execlpe()处停止

时间:2012-11-12 21:45:52

标签: python

我在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)

到达此位置后,脚本将运行重新启动,然后退出。

我很想让它运行脚本的最后一部分,这样我就可以看到发生了什么变化,但我无法做到。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

因为所有exec系列函数都是通过将当前进程替换为您执行的进程来工作的。

如果您只想运行外部命令,请改用spawn函数。 (在这种情况下,os.spawnlpe几乎是替代品。)

答案 1 :(得分:0)

os.execlpe(以及类似的os.exec *函数)替换当前进程:

  

这些功能都执行新程序,替换当前进程; 他们不会回来。