2015-06-16 156 views
0

我试图运行下面的脚本,它工作正常,但我没有得到预期的结果:麻烦与os.chroot()

import os,sys 
os.system("mount /dev/sdb3 /mnt") 
os.system("lsblk") 
os.system("mount --bind /proc /mnt/proc") 
os.system("mount --bind /home /mnt/home") 
os.system("mount --bind /dev /mnt/dev") 
os.system("mount --bind /sys /mnt/sys") 
os.chroot("/mnt") 
os.system("pwd") 
os.system("lsblk") 

这是因为当我做PWD os.chroot后(“/ mnt“),我不在”/ mnt“目录中。但是,当我使用shell命令将下面的代码直接运行到Linux终端(不使用python脚本)时,我得到了预期的结果。

现在我的问题是,为什么我不能使用os.chroot(“/ mnt”)进入/ mnt目录。我如何使用os.chroot(使用python脚本)来实现这一点?

+0

'os.chroot(“/ mnt”)'不会进入'/ mnt'目录,我想你的意思是把pwd改成'/ mnt'。它只会改变进程的根目录。它是'os.chdir()'而不是'os.chroot()'? – Celada

+0

Ok.how我可以使用python命令而不是os.chroot来限制我的文件在chroot目录树中。我想要在我的“/mnt"上执行yum update&build a kernal ..因此我需要一个命令来通过使用python命令复制“chroot命令使用shell”的功能 – Thale

回答

0

Python的os.chroot围绕chroot(2)系统调用原始包装。正如系统调用文档中所述:

这个调用不会改变当前的工作目录,所以在调用'。'之后。可以在植根于'/'的树之外。特别是,超级用户可以通过执行从“chroot监牢”逃:

mkdir foo; chroot foo; cd .. 

此调用不会关闭打开的文件描述符,这样的文件描述符可以允许访问的文件在chroot树之外。

您需要自己明确更改当前工作目录,例如, os.chdir('/')进入新的根目录。

由于chroot(1)可执行文件明确将当前工作目录更改为新的根目录(source),因此您会看到与从shell运行命令不同的行为。

+0

Ic.Very informative.However我怎样才能限制我的文件在chroot目录树使用python命令而不是os.chroot ..我想做百胜更新&建立一个内核我的“/ mnt”..因此,我需要使用python命令来复制“使用shell的chroot命令”的功能。 – Thale

0

方法的chroot()更改当前进程 的根目录中给定的path.To使用这种方法,你需要超级用户特权 。

来源:http://www.tutorialspoint.com/python/os_chroot.htm

难道是根本原因?

作为一种变通方法,你可以调用os.system("cd /mnt; mycommand")

+0

不。我尝试将它作为su运行,但它没有解决问题..谢谢:) – Thale

+0

作为解决方法,您可以调用'os.system( “cd/mnt; mycommand”)' –

+0

yup.Im知道cd命令..但是我需要使用chroot命令来运行这个命令,因为我不想访问该环境目录(outside/mnt)树之外的文件和命令。 – Thale