假设我有一个名为script.py
的程序,它允许使用命令行选项-i
,这需要一个额外的关键字参数,以便我调用
python script.py -i foo
现在假设我的工作目录中有一个名为tags.txt
的文件,其中包含一个字符串列表。现在我希望shell根据-i
中给出的字符串列表在调用脚本时自动完成tags.txt
之后的任何内容。这个想法是在该文件中存储-i
的一些常见输入参数,以减少输入错误并确保更快的输入。这可以用纯Python解决方案吗?
答案 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项目。
答案 1 :(得分:0)
尽管它是更多与命令行相关的问题,并且是解决该问题的方法,并且基于Python的较少,但是可以通过使用file_name
作为Python上的可选参数来使用Python实现此目的的另一种方法命令行和Python脚本将从参数file_name
中指定的文件中读取参数,并更新参数变量。如果未定义file_name
参数,则将期望通过命令行指定其他参数,并且您可能必须验证是否获得了所有参数的值。
建议使用面向命令行(Bash / Shell)的解决方案,例如使用complete
命令或任何其他类似工具。
答案 2 :(得分:-1)
最接近我能想到的(再次同意一个章节提出的另一个观点,这比Python更像是一个shell问题/答案),而不是tags.txt是一个文件,用sym创建它作为目录链接到您想要的文件。但是,要获得自动完成功能,您需要包含目录名称。