【发布时间】:2013-08-21 20:18:26
【问题描述】:
$ script.py *.txt
我想对该目录中的所有 .txt 文件运行 script.py,包括 1.txt、2.txt 和 3.txt。我可以想到两种方法:让 python 脚本处理 globbing,或者让 shell 产生多个进程。
让脚本句柄通配是我更喜欢的方法。
根据Prevent globbing after variable substitution 我可以使用set -f 将其关闭。我如何才能专门为 Python 脚本指定此选项?
【问题讨论】:
-
第三种方法怎么样:让shell产生一个带有多个参数的进程。这是正常的、默认的工作方式,并且在 Python 脚本中很容易处理(通过循环
sys.argv[1:]或使用fileinput)。 -
这是个好主意,但我希望它适用于接受可变数量参数的不同脚本,包括当我使用
optparse或argparse时。 -
我根本不明白这是个问题。几乎任何 Unix 系统附带的所有工具,以及您会在那里找到的 90% 的第三方程序和脚本,都使用
optparse或argparse或其他库,并采用可变数量的参数,并且与 shell globbing 一起工作得很好。如果你没有,那么你可能设计的界面错误,这就是你需要修复的地方。 -
嗯,我认为你是对的。我猜你的意思是,将其包装在一个 shell 脚本中,该脚本将使用
$@扩展参数?如果您在答案中写出来,我会接受它 -
我想过建议,但实际上,你甚至不需要那个。如果您的
script.py可以处理多个输入文件(即,解析出选项后留下的多个参数),就像ls一样,那么 shell globbing 在第一名。有一些工具这样的接口是不合理的(例如,ImageMagick 的convert有散布在参数之间的选项;find显然需要做自己的 blobing...),但它们是一个罕见的例外,而不是规则。为什么你认为你的剧本是个例外?