我是一个初级的Python程序员,对于如何创建一个简单的shell程序来接受命令(例如printprecipes、printinventory、load等)我很不确定
输入应如下所示:
$loadrecipes个
$printmoney()
20个
对于这个shell,我尝试使用while循环,这样即使他们输入了一个可以接受的命令,程序也不会崩溃。你知道吗
def handle_commands():
keep_going=True
command=input("$" + " ")
while keep_going:
if command == '$ quit':
keep_going = False
break
elif command == "$ loadrecipefile(recipe_file)"
j
elif command == "$ printrecipes":
printrecipes()
elif command == "$ printiinventory":
printiinventory()
elif command == "$ printmoney":
printmoney()
elif command == "$ buyingredient":
我不知道接下来该怎么办。 命令是loadrecipes(recipe\u file)接受一个参数,所有print命令不接受一个参数,buyIncomponent(component\u name,编号:int)接受2个参数(成分名称和这些成分的数量)。你知道吗
因此,对于每个命令,我都创建了一个对应的函数。例如对于printiinventory(),我有:
def printiinventory():
print(iinventory['apple'],iinventory['beets'],iinventory['carrots'])
如果命令是:
$printiinventory公司
0 4 3个
结果应该是这样
所以你的流程应该是这样的:
与您所拥有的非常相似,不同的是您不需要期望
$
进入用户的输入。Input函数打印传递的参数并仅返回用户的输入,而不是同一行中的其余内容。因此,您应该检查command == "printrecipes"
等命令说明:
这段代码:
相当于:
唯一的区别是print()创建了一个新行,因此输入将取自打印内容下方的行。你知道吗
您可以用IO低级Python模块来模拟这种行为(即在同一行中打印),但是您不需要这样做。你知道吗
编辑
为了解析命令,您可以选择经典的命令行接口语法,用空格分隔命令名和参数,或者您也可以创建自己的解析器。在第一种情况下,可以使用Python的内置
argparse
模块。如果您更愿意使用第二个解析器(这更令人头痛,尤其是如果您是初学者的话),您必须从头开始编写自己的解析器。如果你知道regex,这没什么大不了的,但恐怕你应该在网站上问另一个问题。我建议你看一些教程。只需在google上搜索一下:“makemyownecommandparserpython”就可以得到成千上万的结果,尽管其中大多数结果都是经典的命令行解析语法。你知道吗编辑2
我注意到你使用了某种标志来检查你是否需要继续进入循环。这在您使用的代码中是没有用的;只需使用
break
命令就可以了。你知道吗编辑3
仔细看看OP的注释,我发现您正在尝试编写由Python脚本执行的Python代码。您当然可以这样做;您已经有了
eval
和exec
模块,但是请注意,这是一种非常危险的做法,代码很容易被注入到您的程序中,造成巨大的安全漏洞。这样做是非常不鼓励的。必须将命令解析和任务执行分开。用户不能直接访问程序的控制流。你知道吗相关问题 更多 >
编程相关推荐