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 に答える