2013-08-29 20 views
1

我目前正在研究argparse模块,我想我的计划,以这样的表现:使用argparse参数以不同的方式

$ python cldir.py # this should delete all .meta files in ~/downloads 

$ python cldir.py -d /path/name/ # delete all .meta files in /path/name 

$ python cldir.py -d /path/name -e txt # should delete all .txt files in /path/name 

现在,我知道我需要使用的文件扩展名的另一个理由( - e在这种情况下),但我想知道我可以如何使-d开关行为如上所示。

这里是我到目前为止的代码:

#!/usr/bin/env python 

import argparse 
import os 
import glob 

version = "0.1.1" 

parser = argparse.ArgumentParser(
    description = 'cldir: clear a directory from .meta and other unwanted files') 

# arguments list 

parser.add_argument('-v', '--version', action='version', version = version) 

parser.add_argument('-d', '--direct', action = 'store_true') 

args = parser.parse_args() 

if args.direct == False: 
    path = os.environ['HOME'] + '/downloads/' 
    files = glob.glob(path + '*.meta') 

    if len(files) == 0: 
     print('No .meta files found in ~/downloads') 
    else: 
     for f in files: 
      os.remove(f) 
    print('%d file(s) deleted' %len(files)) 

else: 
    print(args.direct) 

的东西:打印(args.direct)只是用于测试,直到我达到所期望的行为。

任何其他观察/建议也非常受欢迎,因为我是新来的蟒蛇。

回答

1

使用-d来让用户提供路径。您可以使用default参数设置默认路径。同样,您可以将-e选项的默认值设置为'meta'

import argparse 
import os 
import glob 

version = "0.1.1" 

parser = argparse.ArgumentParser(
    description = 'cldir: clear a directory from .meta and other unwanted files') 

# arguments list 

parser.add_argument('-v', '--version', action='version', version = version) 

parser.add_argument('-d', '--directory', default=os.path.expanduser('~/downloads'), 
        help='directory to be cleaned') 

parser.add_argument('-e', default='meta', help='extension') 

args = parser.parse_args() 
print(args) 
path = os.path.join(args.directory) 
files = glob.glob(path + '*.{}'.format(args.e)) 

if len(files) == 0: 
    print('No .meta files found in ~/downloads') 
else: 
    for f in files: 
     os.remove(f) 
    print('%d file(s) deleted' %len(files)) 
+0

是的,默认=元将做一些修改我猜测的树,谢谢! :) – yaku

1

使-d成为一个简单的“商店”参数与默认值。

parser.add_argument('--direct', '-d', default=os.environ['HOME'] + '/downloads/') 

然后使用args.direct作为路径传递给glob.glob

+0

是的,虽然这是简单的我无法自己想象它。 :P – yaku

1

使用两个自选参数让用户指定任意顺序的目录和扩展,或指定一个,并让对方默认:

p.add_argument('-d','--dir',default='default_dir') 
p.add_argument('-e','--ext',default='meta') 

Input: '' produces: Namespace(dir='default_dir', ext='meta') 
'-d otherdir' => Namespace(dir='otherdir', ext='meta') 
'-d otherdir -e txt' => Namespace(dir='otherdir', ext='txt') 
'-e txt' => Namespace(dir='default_dir', ext='txt') 

阻止使用的-e之前或不-d是可能的,但可能不值得额外的代码。但是它是定位符的默认行为。

或者两个参数可能是'?' positionals

p.add_argument('dir',default='default_dir',nargs='?') 
p.add_argument('ext',default='meta',nargs='?') 

输入产生相同的命名空间将是'''otherdir''otherdir txt'。在这种情况下,指定ext取决于指定dir

我不认为一个store_true-d参数加添什么定义。

相关问题