python os.chroot:退出chroot后出现意外输出

python os.chroot:退出chroot后出现意外输出,python,chroot,Python,Chroot,我有以下代码: #! /usr/bin/python import os import subprocess def run_subprocess(cmd): print 'Starting : {}'.format(cmd) p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) odata, edata = p.communicate() prin

我有以下代码:

#! /usr/bin/python

import os
import subprocess

def run_subprocess(cmd):
    print 'Starting : {}'.format(cmd)
    p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    odata, edata = p.communicate()
    print 'Done : {}'.format(cmd)
    if odata:
        print 'Output : {}'.format(odata)
    if edata:
        print 'Error : {}'.format(edata)
    return odata

LS_CMD = 'ls'
run_subprocess(LS_CMD)  # output 1
x_cwd = os.getcwd()
root_fd =os.open('/', os.O_RDONLY)
os.chroot('/mnt/mnt_sda5')
os.chdir('/')
os.fchdir(root_fd)
os.close(root_fd)
os.chdir(x_cwd)
run_subprocess(LS_CMD)  # output 2
print os.getcwd()
我跳转到另一个目录并返回到当前的工作目录

我希望output1和output2都匹配。输出1是我期望看到的。输出2为空

你能解释一下原因吗


在您的
os.chdir(x_cwd)
之前,您需要
os.chroot('.')
将根目录更改回您现在使用fchdir更改的原始'/'路径。因此,这些线变成:

os.fchdir(root_fd)
os.chroot('.')
os.close(root_fd)

这里有一些细节-

在python中,我是否需要os.chroot('/mnt/mnt_sda5')后面的os.chdir('/')。在它之前还是之后有关系吗?回答我自己的问题。在python中,我们需要它。如果没有os.chdir('/),则os.getcwd()输出不可访问