我正在学习Create your own shell in Python教程,我有一些奇怪的问题。我写了以下代码:
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上使用Notepad ++编写
答案 0 :(得分:0)
从我的链接中的评论中复制粘贴(感谢Ari Gold)
嗨,好像你在Windows上试过了。 (我忘了注意它适用于Linux和Mac或类似Unix的仿真器,如Cygwin)
对于第一个问题,它似乎无法在您的系统环境中找到mkdir
命令。您可能会找到mkdir
二进制文件所在的目录并使用execvpe()来显式指定环境
对于第二个问题,Windows上的os
模块没有fork()函数。
但是,我建议你在Windows上使用Cygwin模拟类似Unix的环境,上面的两个问题应该消失。
在Windows 10中,有Linux-Bash可能有用,但我从不尝试。