在 UNIX 环境中运行时,防止未引用的 python 脚本参数中的通配符扩展

2023-11-29

我有一个 python 脚本,我想为其提供一个(通常)包含通配符的参数,引用一系列我想要处理的文件。这里的例子:

#!/usr/bin/env python

import argparse
import glob 

parser = argparse.ArgumentParser()
parser.add_argument('-i', action="store", dest="i")
results = parser.parse_args()
print 'argument i is: ', results.i
list_of_matched_files = glob.glob(results.i)

在这种情况下,如果用户向传递的参数添加引号,则一切都会正常工作,如下所示:

./test_script.py -i "foo*.txt"

...但很多时候,用户忘记在参数中添加引号,并且当列表仅包含第一个匹配项时,用户会感到困惑,因为 UNIX 已经扩展了列表,而 argparse 才获取第一个列表元素。

有没有办法(在脚本内)阻止 UNIX 在将列表传递给 python 之前扩展列表?或者甚至只是为了测试参数是否不包含引号然后警告用户?


不会。通配符在脚本运行之前就已由 shell(Bash、zsh、csh、fish 等)展开,并且脚本无法对它们执行任何操作。测试参数是否包含引号也不起作用,因为 shell 类似地会删除引号"foo*.txt"在将参数传递给脚本之前,所以 Python 看到的只是foo*.txt.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 UNIX 环境中运行时,防止未引用的 python 脚本参数中的通配符扩展 的相关文章

随机推荐