相关疑难解决方法(0)

python argparse中的自定义选项卡完成

如何argparse在Python脚本中使用shell选项卡完成协作?

#!/usr/bin/env python
import argparse

def main(**args):
    pass

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('positional', choices=['spam', 'eggs'])
    parser.add_argument('--optional', choices=['foo1', 'foo2', 'bar'])
    args = parser.parse_args()
    main(**vars(args))
Run Code Online (Sandbox Code Playgroud)

在.py文件上设置可执行标志后,预期结果应为:

$ ./example.py sp<tab>             
   ->  completes to "./example.py spam"
$ ./example.py --op<tab> 
   ->  completes to "./example.py --optional"
$ ./example.py --optional b<tab>
   ->  completes to "./example.py --optional bar"
$ ./example.py --optional f<tab>   
   ->  completes to "./example.py --optional foo"
       and, additionally, prints  "foo1  foo2"  choices on stdout on a new line
Run Code Online (Sandbox Code Playgroud)

python bash command-line-interface tab-completion argparse

34
推荐指数
2
解决办法
1万
查看次数

在bash中,argparse(以及不推荐使用的optparse)如何响应python程序名后的"tab"按键?

我已经测试过optcomplete使用该optparse模块.它的例子是一个简单的文件,所以我可以让它工作.我也使用该argparse模块对其进行了测试,因为之前的模块已被弃用.但我真的不明白python程序是如何以及由谁在tab press上调用的.我怀疑bashshebang线和argparse(或optparse)模块一起涉及某种方式.我一直试图解决这个问题(现在要阅读源代码).

我有一个更复杂的程序结构,其中包含处理参数的代码片段的包装器.它的argparse.ArgumentParser()实例化和调用add_argument()- 它被超级映射到另一个中间模块以避免重复代码,以及被调用的包装 - 在函数内部.

我想了解这个标签完成在bash和python之间的工作方式(或者就任何其他解释器而言perl).

注意:我对bash完成有一个公平的理解(我刚刚学到了),我想我理解bash(仅)自定义完成.

注意:我已经阅读了其他类似的SO问题,并且没有人真正回答这个问题.

编辑:是bash函数.
我已经理解了python模块如何通过读取os.environ变量值 来了解在命令行中输入的单词

$COMP_WORDS
$COMP_CWORD
$COMP_LINE
$COMP_POINT
$COMPREPLY
Run Code Online (Sandbox Code Playgroud)

这些变量仅在按Tab键上具有值.我的问题是如何触发python模块?

python bash autocomplete shebang argparse

11
推荐指数
1
解决办法
2047
查看次数

使用argparse完成Bash选项卡不会显示目录中的所有文件

我注意到,如果使用argparse参数,bash选项卡完成返回的文件较少.我该如何更改/控制?

最小的示例代码

me@here:~/test$ cat argparsetest.py 
import argparse
parser.add_argument('-i', help='input', required=True)
Run Code Online (Sandbox Code Playgroud)

bash完成示例:

# shows all the files 
me@here:~/test$ python argparsetest.py 
argparsetest.py  result.png       u1.py  

# does not show the image result.png I am actually interested in
me@here:~/test$ python argparsetest.py -i
argparsetest.py  u1.py            
Run Code Online (Sandbox Code Playgroud)

已经有两个类似的问题,但我没有发现它们有用.

python bash shell argparse

3
推荐指数
1
解决办法
1459
查看次数