【发布时间】:2017-12-05 08:24:15
【问题描述】:
当从 bash 命令行将 glob 表达式作为参数传递给脚本时,它会被展开,匹配它的文件会被解压缩到 sys.argv:
# stuff.py
import sys
print(sys.argv)
host:~$ python stuff.py a*
['stuff.py', 'a1', 'a2', 'a3']
我想将这些文件作为sys.argv 的单个元素放在一个容器中:
host:~$ python stuff.py a*
['stuff.py', ['a1', 'a2', 'a3']]
我知道将 glob 表达式放在引号中并使用 glob 模块可以解决问题:
import sys
import glob
print(glob.glob(sys.argv[1]))
host:~$ python stuff.py "a*"
['a1', 'a2', 'a3']
但是,这需要在参数周围添加引号,因此不能直接使用制表符补全。
是否可以防止命令行参数被扩展?
【问题讨论】:
-
我不明白你在说什么
tab,以及你在使用globPython 模块时缺少什么。 -
你想要像 CASE 2 这样的输出吗?如果是,就不要使用“*”。
-
不,你不能那样做。
-
@Rightleg 您不必返回插入引号。如果您在
file_00之前自动完成了参数,则可以附加\*或"*"。例如,命令行可能看起来像python stuff.py file_00"*",传递给 Python 的参数将是file_00*,glob模块将按原样处理它 -
@janos 嗯,这不是我所期望的,但是......我不得不承认它相当不错。如果我可以用一个反斜杠来避开星号,那么痛苦就会有所缓解......我对此很满意,非常感谢。
标签: python bash command-line