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

时间:2014-07-21 11:28:58

标签: python bash shell readline

假设我有一个名为script.py的程序,它允许使用命令行选项-i,这需要一个额外的关键字参数,以便我调用

python script.py -i foo

现在假设我的工作目录中有一个名为tags.txt的文件,其中包含一个字符串列表。现在我希望shell根据-i中给出的字符串列表在调用脚本时自动完成tags.txt之后的任何内容。这个想法是在该文件中存储-i的一些常见输入参数,以减少输入错误并确保更快的输入。这可以用纯Python解决方案吗?

3 个答案:

答案 0 :(得分:5)

在bash中,自动完成程序可以运行命令或bash函数来动态生成自动完成程序列表。假设您的脚本称为foo。一种选择是创建一个名为foo_completer的脚本。您可以在.bash_profile中这样注册它:

complete -C foo_completer foo

现在,无论何时您使用foo命令来选择自动完成选项,都会从bash中调用foo_completer。但是,使用-C并不是创建动态完成程序的唯一方法。这里有一些链接可以帮助您入门。

我见过的最复杂的完成程序之一是用Python编写的aws cli autocompleter

由于您使用的是python,请检查python argcomplete项目。

这里是another example

答案 1 :(得分:0)

尽管它是更多与命令行相关的问题,并且是解决该问题的方法,并且基于Python的较少,但是可以通过使用file_name作为Python上的可选参数来使用Python实现此目的的另一种方法命令行和Python脚本将从参数file_name中指定的文件中读取参数,并更新参数变量。如果未定义file_name参数,则将期望通过命令行指定其他参数,并且您可能必须验证是否获得了所有参数的值。

建议使用面向命令行(Bash / Shell)的解决方案,例如使用complete命令或任何其他类似工具。

答案 2 :(得分:-1)

最接近我能想到的(再次同意一个章节提出的另一个观点,这比Python更像是一个shell问题/答案),而不是tags.txt是一个文件,用sym创建它作为目录链接到您想要的文件。但是,要获得自动完成功能,您需要包含目录名称。