2015-07-12 69 views
-3

我發現這個代碼片段在線爲python終端模擬器,我認爲它看起來很酷,所以我繼續前進,並試圖使用它。我注意到我無法使用「cd」命令,我被困在我運行該文件的目錄中。爲什麼?這是怎麼回事?我怎樣才能修改這段代碼使它像一個完美的本地終端一樣運行?我對編程還很陌生,在我的生活中只使用了子進程模塊。請幫忙!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' 
+0

由於您需要使用os.chdir來更改目錄,因此更改目錄對進程沒有任何影響,您爲什麼還要使用re來分割空白以及從raw_input捕獲什麼錯誤? –

+0

如果你想創建一個*真實的*終端模擬器,你需要使用['pty'模塊](https://docs.python.org/3/library/pty.html)。 – icktoofay

+2

也許你的意思是shell而不是終端模擬器?你正在運行終端模擬器,並使得這段代碼更能夠運行諸如'cd'之類的東西,不會讓它更接近終端模擬器。 – pvg

回答

2

當您打開一個新進程時,您將更改新進程的當前目錄而不是調用進程。您應該使用os.chdir來改變程序的目錄。因此,您需要解析命令行並檢查命令是否爲cd,然後決定不調用Popen,而是使用os.chdir