0

我有一个脚本,它使用 os.walk 向下查找目录结构并按扩展名匹配文件并将文件复制到另一个位置。

这就是我的文件副本:

sourceDir=sys.argv[-2].rstrip("/")
destDir=sys.argv[-1].rstrip("/")
//copy code

所以我只想打电话:

python mycode.py ~/a/ ~/b/ 

我想要做的是添加一个可选的参数开关,它也将通过搜索模式匹配:

python mycode.py --match "pattern" ~/a/ ~/b/ 

在我的代码中,如果:

if "--match" in sys.argvs:
  #try reference the string right after --match"
  for root, dir, files... etc

所以准确地说,如果 --“match” 在 sys.argvs 中,我如何找到“模式”?python新手,所以任何帮助将不胜感激。

谢谢!

4

3 回答 3

1

您可以使用模块 OptionParser。例子:

from optparse import OptionParser
usage = 'python test.py -m'
parse = OptionParser(usage)
parse.add_option('-m', '--match', dest='match', type='string'
                 default='', action='store',
                 help='balabala')
options, args = parse.parse_args()

更新:如果您使用的是 python2.7,argparse会更好。用法与 OptionParser 类似。

于 2013-01-09T02:25:20.237 回答
0

请不要尝试自己解析字符串。请改用argparse模块。

于 2013-01-09T02:24:54.023 回答
0

argparse库非常擅长可选参数解析:

import argparse

p = argparse.ArgumentParser(description="My great script")
p.add_argument("sourceDir", type=str, help="source directory")
p.add_argument("destDir", type=str, help="destination directory")
p.add_argument("--match", type=str, dest="match", help="search pattern")

args = p.parse_args()

print args.sourceDir, args.destDir, args.match

这样,args.match如果None没有提供它:

Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py ~/a/ ~/b/
/Users/dgrtwo/a/ /Users/dgrtwo/b/ None
Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py --match "pattern" ~/a/ ~/b/
/Users/dgrtwo/a/ /Users/dgrtwo/b/ pattern

它还可以判断是否存在正确数量的参数:

usage: mycode.py [-h] [--match MATCH] sourceDir destDir
mycode.py: error: too few arguments

并包含一条帮助信息:

Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py -h
usage: mycode.py [-h] [--match MATCH] sourceDir destDir

My great script

positional arguments:
  sourceDir      source directory
  destDir        destination directory

optional arguments:
  -h, --help     show this help message and exit
  --match MATCH  search pattern
于 2013-01-09T02:25:02.653 回答