Python解析用户输入的方式与CLI输入相同吗?

Posted

技术标签:

【中文标题】Python解析用户输入的方式与CLI输入相同吗?【英文标题】:Python parse user input the same way as CLI input? 【发布时间】:2021-11-23 16:46:48 【问题描述】:

我正在构建一个 CLI,我刚刚发现了 Fire,这是从命令行向函数传递参数的好方法。它非常干净和直观。

但是,我遇到的一个问题是我需要在程序仍在运行并且值在内存中时执行一些操作。所以为此我不能使用 Fire(或者至少我认为我不能)。但我想使用与 Fire 相同的东西。我认为我需要使用 input() 让用户输入一个字符串,但是我需要解释它。

对于那些不了解 Fire 是如何工作的人,这里是如何工作的。它将 CLI 命令转换为函数参数并使用这些值执行。

例子

command line:

function_name parameter1 parameter2 parameter3 --parameter6_name parameter6

python script:

def function_name(parameter1, parameter2, parameter3=0... parameter6_name='No'):

我可以想出几种方法,我可能会以粗略的方式手动完成这项工作,但这会很困难,而且我认为我无法让它完全正确地工作。有没有像这样解析的现有方法?我已经尝试搜索了几个小时,但我不确定我是否知道针对此问题的正确搜索词。如果有人能指出正确的方向,我将不胜感激。

编辑。说脚本称为script.py。我知道你可以使用 argparse 来调用:

script.py param1 param2 --param4_name param4

(我认为 Fire 更适合此目的)

我要做的不是在命令行命令期间传递参数以启动应用程序,而是在另一个 python 脚本运行时传递参数,使用类似 input() 的方法。例如。

python3 script.py
Type a search phrase for the option you want: input()
Choose a character to select the option: input()
Type the parameters for a function to call to use with that option: input()

option_func1 param1 param2 --param4_name param4

or 

option_func2 param1 param2 --param4_name param4

(然后它使用初始选项中的值使用这些参数运行该函数)

【问题讨论】:

【参考方案1】:

我建议使用argparse,一个模块可以轻松编写用户友好的命令行界面

【讨论】:

我知道 argparse 及其工作原理,但我正在寻找的是在我的程序运行时工作的东西,而不是作为调用程序的参数。我对 OP 进行了编辑以解释我的意思。也许 argparse 也可以做到这一点,但我现在知道怎么做。 argparse 这样的解析器可以解析用户提供的列表字符串,而不是标准的sys.argv @hpaulj 哦,真的吗?那很完美。我如何让它做到这一点? argparse 文档对此有很多说明。 args = parser.parse_args(avgv),其中argv 类似于['-f', 'foovalue', '--bar=2']。也可以编辑sys.argv 列表,并使用标准parser_args()。单元测试文件test_argparse 使用两者来测试各种情况。 使用args = parser.parse_args(input_from_user.split())

以上是关于Python解析用户输入的方式与CLI输入相同吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python从菜鸟到高手:获取用户输入函数与注释

我可以将字符串与 AST 的某个子树匹配吗?

python- sys.argv CLI 参数的帮助程序列表

“在附近解析时 JSON 输入意外结束”错误:npm install -g@angular/cli

我可以在Aws AppSync解析器映射模板中对用户输入进行消毒吗?

在Google App Engine中,Python DataStore模型是get_by_key_name的结果( )以与输入相同的顺序?