Skip to main content
 首页 » 编程设计

python之在 UNIX 环境中运行时,防止在非引号 python 脚本参数中扩展通配符

2025年05月04日15zhengyun_ustc

我有一个 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.