Python终端仿真器:无法使用";cd";命令

Python终端仿真器:无法使用";cd";命令,python,bash,terminal,Python,Bash,Terminal,我在网上找到了一个python终端模拟器的代码片段,我认为它看起来很酷,所以我继续尝试使用它。我注意到我不能使用“cd”命令,我被困在运行文件的目录中。为什么会这样?发生什么事?我如何修改这段代码,使它像一个完美的本机终端一样运行?我还是个编程新手,一生中只玩过一次子流程模块。请帮忙 import subprocess import re while True: # prevents lots of python error output try: s = ra

我在网上找到了一个python终端模拟器的代码片段,我认为它看起来很酷,所以我继续尝试使用它。我注意到我不能使用“cd”命令,我被困在运行文件的目录中。为什么会这样?发生什么事?我如何修改这段代码,使它像一个完美的本机终端一样运行?我还是个编程新手,一生中只玩过一次子流程模块。请帮忙

import subprocess
import re

while True:
    # prevents lots of python error output
    try:
        s = raw_input('> ')
    except:
        break

    # check if you should exit
    if s.strip().lower() == 'exit':
        break

    # try to run command
    try:
        cmd = subprocess.Popen(re.split(r'\s+', s), stdout=subprocess.PIPE)
        cmd_out = cmd.stdout.read()

        # Process output
        print cmd_out

    except OSError:
        print 'Invalid command'

当您打开一个新进程时,您更改了新进程的当前目录,而不是调用进程的当前目录。您应该使用
os.chdir
来更改程序的目录。因此,您需要解析命令行并检查命令是否为
cd
,然后决定不调用
Popen
,而是调用
os.chdir

因为您需要使用os.chdir来更改目录,因此更改进程的目录没有任何效果,还有,为什么要使用re来拆分空白,以及从原始输入中捕获什么错误?如果要制作真正的终端仿真器,您需要使用。也许您指的是shell而不是终端仿真器?您正在终端仿真器中运行,使此代码更能运行诸如“cd”之类的东西并不会使它更接近终端仿真器。
cd
始终是shell内置命令。它不存在于文件系统中。没有这样的可执行文件。