Python在参数切换后立即获取字符串

时间:2013-01-09 02:20:51

标签: python string matching optional-parameters

我有一个脚本,它使用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

所以准确地说,如果 - “匹配”在sys.argvs中我怎么能找到“模式”? python的新手,所以任何帮助都会非常感激。

谢谢!

3 个答案:

答案 0 :(得分: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类似。

答案 1 :(得分:0)

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

答案 2 :(得分: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