是否可以在终端中调用 python 函数?
Is it possible to call a python function in a terminal?
我希望能够 运行 一个 python 程序并在终端中键入一个函数并执行该函数。例如:
我在python脚本中定义了一个函数
def hi():
print('hello')
当程序正在 运行ning 时,我在终端中输入“hi()”或“hi”,然后返回“hello”。
我的最终目标是拥有许多可以随时调用的不同功能。我知道我可以用大量 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")
您可以使用自己的字典代替全局命名空间,但需要对其进行初始化。这可以帮助实现类似帮助系统的东西。您甚至可以将所有命令放在它们自己的模块中,使用 its 命名空间而不是您自己的字典。
然后是提供参数的问题。如果你想做类似的事情,你可以用逗号或类似的东西分割字符串。
您甚至可以探索“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
I want to be able to run a python program and type a function in the
terminal and have the function execute. For example:
本质上你是在问:我怎样才能link一个命令的可执行文件或脚本,以便它可以在我的终端中运行。为此,首先创建 Python 脚本并将其放置在某处。下一步是使脚本可以从终端内的任何目录访问。这将取决于您的平台。我先解释 linux 然后是 windows.
如果您在 linux 或 mac,现在是时候弄清楚如何从任何地方而不是从一个地方 运行 程序目录。
您应该在 Python 程序的顶部包含这两个 shebang 以简化 error-prone。您可以 google 它们的含义与“python3 shebang”和“python3 encoding shebang”
#!/usr/bin/python3
# -*- coding: utf-8 -*-
从您的终端开始(它应该 运行 您的程序):
username@pc:~$ python3 /full/path/to/my_file.py
一旦你开始工作,就可以link你的程序执行命令了。您可以通过在 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:\WINDOWS\system32
或 C:\WINDOWS\
.
现在重新启动您的终端,使用 my_file
应该 运行 您的脚本。如果您希望将脚本放在自定义位置而不是 PATH 中已有的文件夹,请参阅
问题 2
and while program is running, I type "hi()" or "hi" in the terminal and "hello" is returned.
我假设您指的是打印,而不是 returning。很难将 return 字符串发送到控制台。您正在寻找 input
函数以在此处获取用户输入。
问题 3
My end goal is to have many different functions that can be called any time. I understand I could hard-code this with a ton of if/elif statements but that is a messy and seemingly impractical solution.
你可以为此制作多个小程序,也可以制作一个大程序。您还应该在没有最喜欢的搜索引擎的情况下搜索“python 命令行参数”。学习这对任务很有用。
问题 4
An example of this in use is with discord bots that can look for a prefix and command following it and run the function that was called
这是完全不同的问题。您应该搜索有关使用 python 制作不和谐机器人的信息。让命令在 discord 中工作与在你的控制台中工作是非常不同的。
问题 5
Is there any way I can do this in a way that is clean looking to the user?
是的。您应该查看 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 中让事情变得“干净”是完全不同的问题,您必须首先了解更多关于 Discord 机器人的信息。我建议 youtube 教程和 discord 的官方文档。
我希望能够 运行 一个 python 程序并在终端中键入一个函数并执行该函数。例如:
我在python脚本中定义了一个函数
def hi():
print('hello')
当程序正在 运行ning 时,我在终端中输入“hi()”或“hi”,然后返回“hello”。
我的最终目标是拥有许多可以随时调用的不同功能。我知道我可以用大量 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")
您可以使用自己的字典代替全局命名空间,但需要对其进行初始化。这可以帮助实现类似帮助系统的东西。您甚至可以将所有命令放在它们自己的模块中,使用 its 命名空间而不是您自己的字典。
然后是提供参数的问题。如果你想做类似的事情,你可以用逗号或类似的东西分割字符串。
您甚至可以探索“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
I want to be able to run a python program and type a function in the terminal and have the function execute. For example:
本质上你是在问:我怎样才能link一个命令的可执行文件或脚本,以便它可以在我的终端中运行。为此,首先创建 Python 脚本并将其放置在某处。下一步是使脚本可以从终端内的任何目录访问。这将取决于您的平台。我先解释 linux 然后是 windows.
如果您在 linux 或 mac,现在是时候弄清楚如何从任何地方而不是从一个地方 运行 程序目录。
您应该在 Python 程序的顶部包含这两个 shebang 以简化 error-prone。您可以 google 它们的含义与“python3 shebang”和“python3 encoding shebang”
#!/usr/bin/python3
# -*- coding: utf-8 -*-
从您的终端开始(它应该 运行 您的程序):
username@pc:~$ python3 /full/path/to/my_file.py
一旦你开始工作,就可以link你的程序执行命令了。您可以通过在 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:\WINDOWS\system32
或 C:\WINDOWS\
.
现在重新启动您的终端,使用 my_file
应该 运行 您的脚本。如果您希望将脚本放在自定义位置而不是 PATH 中已有的文件夹,请参阅
问题 2
and while program is running, I type "hi()" or "hi" in the terminal and "hello" is returned.
我假设您指的是打印,而不是 returning。很难将 return 字符串发送到控制台。您正在寻找 input
函数以在此处获取用户输入。
问题 3
My end goal is to have many different functions that can be called any time. I understand I could hard-code this with a ton of if/elif statements but that is a messy and seemingly impractical solution.
你可以为此制作多个小程序,也可以制作一个大程序。您还应该在没有最喜欢的搜索引擎的情况下搜索“python 命令行参数”。学习这对任务很有用。
问题 4
An example of this in use is with discord bots that can look for a prefix and command following it and run the function that was called
这是完全不同的问题。您应该搜索有关使用 python 制作不和谐机器人的信息。让命令在 discord 中工作与在你的控制台中工作是非常不同的。
问题 5
Is there any way I can do this in a way that is clean looking to the user?
是的。您应该查看 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 中让事情变得“干净”是完全不同的问题,您必须首先了解更多关于 Discord 机器人的信息。我建议 youtube 教程和 discord 的官方文档。