我希望能够运行python程序,在终端中键入一个函数并执行该函数。例如:
我在python脚本中定义了一个函数
def hi():
print('hello')
在程序运行时;hi()"或";嗨"在终端中;你好";返回。
我的最终目标是拥有许多可以随时调用的不同函数。我知道我可以用大量的if/elif语句对其进行硬编码,但这是一个混乱且似乎不切实际的解决方案。
使用中的一个例子是discord机器人,它可以查找前缀和后面的命令,并运行名为的函数
有没有什么方法可以让用户看起来干净?
#很抱歉格式不正确,我对Stack Overflow 很陌生
这可能会变得复杂。一个基本的解决方案是从全局命名空间中获取函数对象。
def hi():
print("Hello")
def bye():
print("Sorry, I'm staying")
while True:
try:
cmd = input("what up? ")
globals()[cmd.strip()]()
except KeyError:
print("Invalid")
您可以使用自己的字典而不是全局名称空间,代价是需要初始化它。这可以帮助实现帮助系统之类的东西。您甚至可以将所有命令放在自己的模块中,使用的命名空间,而不是您自己的dict。
然后是提供参数的问题。如果你想做这样的事情,你可以用逗号分隔字符串,或者类似的东西。
你甚至可以探索";Python中的领域特定语言";更复杂但富有表现力的解决方案。
我认为您可以使用以下代码:
import sys
def hi():
print('hello')
while True:
c = sys.stdin.readlines(1)[0].split('n')[0]
eval(c)()
eval()可以使字符串成为函数,sys.stdin具有读取cmd输入的函数。
问题1
我希望能够运行python程序并在终端并执行该功能。例如:
从本质上讲,您在问:如何将可执行文件或脚本链接到命令,使其在我的终端中工作。要做到这一点,首先创建Python脚本并将其放置在某个位置。下一步是使脚本可以从终端内的任何目录访问。这将取决于您的平台。我首先介绍linux,然后介绍windows。
如果你在linux或mac上,现在是时候弄清楚如何从任何地方而不是一个目录运行程序了。
您应该在Python程序的顶部包含这两个shebang,以减少出错的可能性。你可以用";蟒蛇3 shebang";以及";编码shebang的python3";
#!/usr/bin/python3
# -*- coding: utf-8 -*-
从你的终端开始(它应该运行你的程序):
username@pc:~$ python3 /full/path/to/my_file.py
一旦你开始工作,是时候把你的程序链接到一个命令了。在linux/mac上使用bash别名可以很容易地做到这一点,方法是在位于主目录中的.bashrc配置文件中添加一行新行(在终端中使用"cd~")。现在将这一行添加到.bashrc中,以使用别名运行该示例
alias my_command='python3 python3 /full/path/to/my_file.py'
现在重新启动您的终端,my_command
应该来自任何目录。
如果您在windows上,现在仍然是时候让文件从任何地方执行了。首先,您必须将.py
文件与解释器相关联。使用";以";菜单并将其文件类型分配给您的本地python.exe
如果操作正确,双击该文件应该会打开终端一小段时间,运行脚本,然后关闭。您可以在程序结束时添加input()
调用,使其等待回车关闭。
现在是时候将/full/path/to/my_file.py
添加到windows系统PATH
中了,这样它就可以在终端中的任何文件夹中工作。您可以通过在系统PATH中添加一个新文件夹来完成此操作。在这种情况下,这意味着将/full/path/to/
添加到PATH中。或者,您可以将脚本放置在PATH中的某个位置,如C:WINDOWSsystem32
或C:WINDOWS
。
现在重新启动您的终端,使用my_file
应该可以运行您的脚本。如果您希望将脚本放置在自定义位置,而不是PATH中已有的文件夹,请参阅如何将文件夹添加到Windows 10中的"PATH"环境变量(带屏幕截图)
问题2
并且当程序正在运行时;hi()"或";嗨"在终端中;你好";返回。
我认为您的意思是打印,而不是在这种情况下返回。很难将字符串返回到控制台。您正在寻找input
函数,以便在此处接受用户输入。
问题3
我的最终目标是拥有许多可以随时调用的不同函数。我知道我可以用大量的if/elif语句对其进行硬编码,但这是一个混乱且似乎不切实际的解决方案。
您可以为此制作多个小程序,也可以制作一个大程序。您还应该搜索";python命令行参数";没有最喜欢的搜索引擎。学习这一点将对任务有用。
问题4
使用中的一个例子是discord机器人,它可以查找前缀和后面的命令,并运行称为的函数
这是一个完全不同的问题。你应该搜索关于用python制作不和机器人的信息。让命令在不协调的情况下工作与让它们在控制台中工作非常不同。
问题5
有什么方法可以让用户看起来干净吗?
是。您应该研究python的input()
功能,并可能弄清楚如何清除终端屏幕,例如:
import os
def clear():
cmd = "clear" # default to linux command
if os.name == ("nt"): # If Machine is running on Windows, use cls
cmd = "cls"
os.system(command)
>>> clear()
制造事物"干净";不和是完全不同的问题,你必须首先了解更多关于discord机器人的信息。我建议youtube教程和discord的官方文档。
您可以使用简单的终端
from easy_terminal import terminal
@terminal()
def hi():
print("Hello!")
@terminal()
def hello(answer: str = "world"):
print(f"Hello {answer}!")
在终端中键入hi或hello以查看结果