2017-10-14 35 views
0

我想打电话给在命令行Python模块的时间在我的时区转换为UTC时间是这样的:Python parse_args读取的参数在哪里?

$ dt-la-utc.py "2017-10-14 12:10:00" 

当我执行如下所示的模块中,convert_la_utc功能正常工作,如果我硬编码日期和时间。但是,我想以日期和时间作为输入的命令行。但是parse_args函数不起作用。如果我运行Python调试器并检查“args”变量,则没有任何内容。我究竟做错了什么?

#!/usr/bin/env python 
import argparse 
import datetime 
from pdb import set_trace as debug 
import pytz 
import sys 

def parse_args(): 
    """Parse arguments.""" 
    parser = argparse.ArgumentParser(description="Convert LA time to UTC time.") 
    parser.add_argument("dt", help="LA date and time in format: YYYY-MM-DD HH:MM:SS") 
    args = parser.parse_args() 
    debug() 
    return args 

def convert_la_utc(): 
    """Convert time in Los Angeles to UTC time.""" 
    date = '2017-10-12' 
    time = '20:45:00' 
    date_time = date + ' ' + time 
    datetime_format = '%Y-%m-%d %H:%M:%S' 

    local = pytz.timezone("America/Los_Angeles") 
    naive = datetime.datetime.strptime(date_time, datetime_format) 
    local_dt = local.localize(naive, is_dst=None) 
    utc_dt = local_dt.astimezone(pytz.utc) 
    print "Datetime in Los Angeles: {0}".format(date_time) 
    print "UTC equivalent datetime: {0}".format(utc_dt.strftime("%Y-%m-%d %H:%M:%S")) 

def main(): 
    args = parse_args() 
    convert_la_utc() 

if __name__ == '__main__': 
    sys.exit(main()) 

回答

1

您需要进一步找回你的说法,例如:

def main(): 
    args = parse_args() 
    dt = args.dt 

什么parser.parse_args()回报是argparse.Namespace对象 - 你可以在你的def main()加入print type(args)验证。更多解释可以在here找到。

+0

不是这样。如果它在函数内部不可见,则它不会在其外部可见。 – William

+0

那么..它适用于我。等待编辑。 – atru

+1

尝试打印args.dt后解析它。有用。 argparser从您的选项名称中定义动态成员。 –