optparse与bash自动补全的奇怪行为
我正在为刚接触Linux的用户编写一个脚本,所以请理解我为什么会问这个问题 :)
我的脚本是这样运行的:
python script.py -f filename.txt
我使用了optparse
这个模块。不过,在进行自动补全时,我注意到了一些问题。
当我这样做时,自动补全是有效的:
python script.py <tab completion> # Tab completion works normally as expected
但是当我这样做时,自动补全就不管用了:
python script.py -f <tab completion> # No type of tab completion works here.
我真的不希望我的用户手动输入输入文件的名字。自动补全是必须的。我该怎么做才能让它正常工作,或者我哪里做错了呢?
3 个回答
0
如果你希望用户的使用体验更简单一些(也就是说,他们不需要了解命令行是怎么工作的,以及在他们的电脑上可能是如何设置的),那么你的程序应该先整理出一个输入文件的列表,然后把这个列表展示给用户,让他们选择。
1
这段内容是关于bash自动补全的。
你可以先检查一下自己是否有bash_completion脚本,并找找里面有没有关于python的内容。
通常的补全文件在 /etc/bash_completion
这个路径下,你的系统里应该有类似的内容:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
在你的.bashrc文件(或者是_profile之类的文件)里。
现在你可以通过添加自己的脚本来重新定义一些行为。可以看看 /etc/bash_completion
文件,获取一些灵感哦。:)
4
这其实跟bash的工作方式有关,而不是跟python本身有关。经过一些实验,发现第二次及之后按TAB键实际上会让bash进行扩展。
编辑: bash之所以只扩展*.py
和*.pyc
文件,很可能是因为这一行的第一个词是python
。如果你在python脚本的第一行加上#! /usr/bin/env python
,然后用chmod +x script.py
命令给脚本加上执行权限,再试试./script.py -f
和TAB键补全,这时候会发生什么呢?我猜应该会正常工作。