我正在尝试创建一个接受命令行参数的脚本,并根据输入调用相关函数。 以下是我的主要功能:
from lib.updatefeed import gather
#stdlib imports
import argparse
def main():
print "test"
parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('-ip', type=str, nargs='+', help="Search for a single IP")
parser.add_argument('-list', type=str, nargs='?', help="Search for a list of IP")
parser.add_argument('-update', type=str, nargs='?', help='Update the local storage')
args = parser.parse_args()
if args.ip:
if len(args.ip) > 4:
print "Too many"
sys.exit(1)
parse_ip(args.ip)
if args.list:
parse_ipList(list)
if args.update:
print "updating"
gather()
if __name__ == '__main__':
main()
所有其他参数都正常工作,并且正在调用各自的函数。唯一的问题是“更新”参数。
出于某种原因,在传递-update arg时不会调用gather()
函数。我还在函数调用之前添加了一个print语句,但也没有打印。
任何人都可以帮我确定根本原因。
以下是我的聚会功能的一部分:
def gather(self):
if not os.path.exists('New'):
os.mkdir('New')
print "Starting feed update process"
答案 0 :(得分:2)
parser.add_argument('-update', type=str, nargs='?', help='Update the local storage')
将选项-update
声明为采用单个可选参数(nargs='?'
);选项的值可以是参数(如果提供),也可以是default
键的值。但是,您没有提供default
密钥,默认default
为None
。
因此,如果您只提供没有参数的命令行选项-update
,那么args.update
的值将为None
,并且测试:
if args.update:
print "updating"
gather()
会失败,所以什么都不会做。
显然,您只关心命令行中是否存在-update
,因此不应该接受任何参数。要处理这种情况,请将选项定义为具有操作store_true
,并省略type
和nargs
参数:
parser.add_argument('-update', action='store_true', help='Update the local storage')