2016-10-17 2 views
1

Я учусь с учебником Create your own shell in Python, и у меня есть какая-то странная проблема. Я написал следующий код:Python: [Errno 2] Нет такого файла или каталога - странный вопрос

import sys 
import shlex 
import os 

SHELL_STATUS_RUN = 1 
SHELL_STATUS_STOP = 0 

def shell_loop(): 
    status = SHELL_STATUS_RUN 

    while status == SHELL_STATUS_RUN: 
     sys.stdout.write('> ') #display a command prompt 
     sys.stdout.flush() 
     cmd = sys.stdin.readline() #read command input 
     cmd_tokens = tokenize(cmd) #tokenize the command input 
     status = execute(cmd_tokens) #execute the command and retrieve new status 

def main(): 
    shell_loop() 

def tokenize(string): 
    return shlex.split(string) 

def execute(cmd_tokens): #execute command 
    os.execvp(cmd_tokens[0], cmd_tokens) #return status indicating to wait for the next command in shell_loop 
    return SHELL_STATUS_RUN 


if __name__ == "__main__": 
    main() 

И теперь, когда я набираю команду «MkDir папка» возвращается ошибка: [Errno 2] No such file or directory. НО, если я напишу ранее команду «help», которая работает правильно (отображает все доступные команды), команда mkdir работает правильно и создает папку. Пожалуйста, расскажите мне, что случилось с моим кодом? Я пишу в блокноте ++ на Windows, 8.1 64x

+0

К сожалению, он не работает. Такая же ошибка. –

+0

Забудьте об этом: это правильно. Виноват. Можете ли вы напечатать 'cmd_tokens' перед вызовом execvp (поместите это в свой вопрос) –

+0

прочитать комментарии по вашей ссылке –

ответ

0

копипаст из комментариев в моей ссылке (спасибо за Ari Gold)

Привет TYH, похоже, вы пробовали его на Windows. (Я забыл отметить, что он работает на Linux и Mac или Unix-подобном эмуляторе, таком как Cygwin)

Для первой проблемы кажется, что она не может найти команду mkdir в вашей системной среде. Вы можете найти каталог, что mkdir бинарных постоянно находится в и использовании execvpe() явно указать среду вместо

Для второй задачи, то os модуля на Windows, не имеет никакой функции вилки(). Тем не менее, я предлагаю вам использовать Cygwin для Windows для эмуляции среды, подобной Unix, и две проблемы, описанные выше, должны исчезнуть.

В Windows 10 есть Linux-Bash, который может работать, но я никогда не пытаюсь.

Смежные вопросы