2016-03-08 173 views
2

對於在終端中說我做了cd Desktop你應該知道它會將你移動到那個目錄下,但是我如何在python中執行該操作,但是使用Desktop的raw_input("")來執行我的命令?如何從python執行os/shell命令

+0

您是否在問如何通過Python中的raw_input執行shell/cmd命令? –

+0

查克洛根是正確的謝謝你知道理解我的問題 –

+0

查克洛根我檢查出沒有raw_input的跡象,因爲我看到 –

回答

1

下面的代碼讀取的raw_input使用你的命令,並使用使用os.system()

import os 

if __name__ == '__main__': 
    while True: 
     exec_cmd = raw_input("enter your command:") 
     os.system(exec_cmd) 

最好的問候, 亞龍執行它

+0

當使用代碼時cd不會工作 –

+0

請參閱下面的問題和解決辦法「cd」http://stackoverflow.com/questions/35843054/change-directory- in-terminal-using-python/35843532#35843532 – Yaron

+0

當我打開文件並執行cd/home/pi/Desktop/asf1/dos時,什麼也沒有發生 –

1

也許你可以這樣做:

>>> import subprocess 
>>> input = raw_input("") 
>>> suprocess.call(input.split()) # for detail usage, search subprocess 

瞭解詳情,你可以搜索subprocess模塊

+0

如'subprocess'文檔中所示,這會在'input =「ls -l」'的情況下引發錯誤。你需要用'space'字符來'分割'輸入字符串,以便給出'subprocess.call()'它可以使用的東西(一個列表)。 – skeletalbassman

+0

@skeletalbassman,是的,謝謝。 –

+0

使用'shlex.split' – warvariuc

1

去與你的具體的例子,你會做到以下幾點:

import os 
if __name__ == "__main__": 
    directory = raw_input("Please enter absolute path: ") 
    old_dir = os.getcwd() #in case you need your old directory 
    os.chdir(directory) 

我在我已經寫了一些目錄維護功能之前使用這種技術,它的工作原理。如果你想更普遍地運行shell命令,你可能會喜歡:

import subprocess 
if __name__ == "__main__": 
    command_list = raw_input("").split(" ") 
    ret = subprocess(command_list) 
    #from here you can check ret if you need to 

但是要小心這個方法。這裏的系統不知道它是否傳遞了一個有效的命令,所以它可能會失敗並錯過異常。更好的版本可能如下所示:

import subprocess 
if __name__ == "__main__": 
    command_kb = { 
     "cd": True, 
     "ls": True 
     #etc etc 
    } 
    command_list = raw_input("").split(" ") 
    command = command_list[0] 
    if command in command_kb: 
     #do some stuff here to the input depending on the 
     #function being called 
     pass 
    else: 
     print "Command not supported" 
     return -1 
    ret = subprocess(command_list) 
    #from here you can check ret if you need to 

此方法表示支持的命令列表。然後,您可以根據需要操作參數列表來驗證它是否是有效的命令。例如,您可以檢查您目錄cd是否存在,如果不存在,則向用戶返回錯誤。或者你可以檢查路徑名是否有效,但只有當通過絕對路徑連接時。