3

Pythonでchrootラッパーを書きたいです。スクリプトはいくつかのファイルをコピーし、他のものをセットアップしてからchrootを実行し、chrootシェルに到達するはずです。

トリッキーな部分は、chrootに入った後にPythonプロセスを実行したくないということです。

言い換えれば、Pythonはセットアップ作業を行い、chrootを呼び出してそれ自体を終了し、chrootシェルのままにしておく必要があります。chrootを終了すると、Pythonスクリプトを呼び出したときのディレクトリにいるはずです。

これは可能ですか?

4

2 に答える 2

2

私の最初の考えは、os.exec*関数の1つを使用することです。これらは、Pythonプロセスをchrootプロセス(または実行することにしたものexec*)に置き換えます。

# ... do setup work
os.execl('/bin/chroot', '/bin/chroot', directory_name, shell_path)

(またはそのようなもの)

于 2010-11-15T23:54:09.410 に答える
0

または、popenコマンドに新しいスレッドを使用して、メインコードのブロックを回避し、コマンドの結果を返すこともできます。

import popen2
import time
result = '!' 
running = False

class pinger(threading.Thread):
    def __init__(self,num,who):
        self.num = num
        self.who = who
        threading.Thread.__init__(self)

    def run(self):
        global result
        cmd = "ping -n %s %s"%(self.num,self.who)
        fin,fout = popen2.popen4(cmd)
        while running:
            result = fin.readline()
            if not result:
                break
        fin.close()

if __name__ == "__main__":
    running = True
    ping = pinger(5,"127.0.0.1")
    ping.start()
    now = time.time()
    end = now+300
    old = result
    while True:
        if result != old:
            print result.strip()
            old = result
        if time.time() > end:
            print "Timeout"
            running = False
            break
        if not result:
            print "Finished"
            break
于 2010-11-16T01:40:38.217 に答える