我正在为刚接触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.
我真的不希望我的用户输入输入文件的名称。标签完成是必须的。我怎样才能使它工作或我在这里做错了什么?
答案 0 :(得分:4)
这更多地与bash的工作方式有关,而不是python的工作原理。试验一下,看起来第二个和更多的TAB实际上会导致bash扩展。
编辑:bash仅展开*.py
和*.pyc
文件的可能原因是该行的第一个字是python
。如果您将#! /usr/bin/env python
添加到python脚本的第一行chmod +x script.py
然后尝试./scipt.py -f
并选项卡完成,那么会发生什么?我怀疑它会正常工作。
答案 1 :(得分: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
文件以获得一些灵感。 :)
答案 2 :(得分:0)
如果您希望用户获得简化的体验(即他们不需要了解shell如何工作以及如何在其特定安装中进行配置),那么您的程序应该构建一个输入文件列表并将其显示为用户选择。