从文件列表中自动完成命令行参数

6 投票
3 回答
3110 浏览
提问于 2025-04-18 14:05

假设我有一个程序叫做 script.py,它可以在命令行中使用 -i 这个选项,而这个选项需要一个额外的关键词参数,也就是说我需要这样调用它:

python script.py -i foo

现在假设在我的工作目录里有一个文件叫 tags.txt,里面包含了一些字符串的列表。现在我想让命令行在我输入 -i 后面的时候能够自动补全,根据 tags.txt 里给出的字符串列表。这样做的目的是为了把一些常用的 -i 输入参数存储在这个文件里,这样可以减少输入错误,并且加快输入速度。请问用纯 Python 的方法能做到这一点吗?

3 个回答

0

虽然这个问题更多是关于命令行的,解决方案也不是特别依赖Python,但其实可以用Python来实现这个功能。你可以在命令行中把file_name作为一个可选参数传入,然后你的Python脚本会从这个file_name指定的文件中读取参数,并更新相应的变量。如果没有提供file_name这个参数,脚本就会期待你通过命令行输入其他参数,这时你需要检查一下是否所有的参数都有值。

建议使用命令行(Bash/Shell)相关的解决方案,比如使用complete命令或者其他类似的工具。

1

我能想到的最接近的办法是(再次同意另一位朋友提到的观点,这其实更像是一个关于命令行的问题,而不是Python),与其把tags.txt当成一个文件,不如把它做成一个文件夹,然后在里面放你想要的文件的快捷方式。不过,要实现自动补全,你需要把这个文件夹的名字也加上。

8

在bash中,自动补全功能可以运行一个命令或bash函数,动态生成补全列表。假设你的脚本叫做foo。你可以创建一个名为foo_completer的脚本。然后在你的.bash_profile文件中这样注册它:

complete -C foo_completer foo

现在,每当你在使用foo命令时按下Tab键进行自动补全,bash就会调用foo_completer。但是,使用-C选项并不是创建动态补全的唯一方法。这里有一些链接可以帮助你入门。

我见过的最复杂的补全器是aws cli自动补全器,它是用python写的。

既然你在使用python,可以看看python argcomplete这个项目。

这里还有另一个例子

撰写回答