optparse和bash选项卡完成的奇怪行为

时间:2010-06-02 07:29:45

标签: python 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 :(得分: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如何工作以及如何在其特定安装中进行配置),那么您的程序应该构建一个输入文件列表并将其显示为用户选择。