是否可以在终端中调用python函数



我希望能够运行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:WINDOWSsystem32C: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以查看结果

最新更新