1

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

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

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

4

2 回答 2

1

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

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

于 2012-11-12T21:47:42.923 回答
0

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

这些函数都执行一个新程序,替换当前进程;他们不回来。

于 2012-11-12T21:48:57.717 回答