Невозможно передать аргумент питону с помощью Optparse - PullRequest
1 голос
/ 28 декабря 2011

Я написал эту программу на Python. всякий раз, когда я запускаю скрипт, используя такие параметры, как

python script.py -t Возвращает мне текущее время в unixtime.

но всякий раз, когда я пытаюсь передать аргумент типа

python script.py -c 1325058720 Он говорит, что LMT не определен. Так что я удалил LMT из

LMT = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime())

Тогда он просто пропускает мой аргумент и возвращает текущее время в Localtime.

Может кто-нибудь помочь мне передать аргумент в LMT и преобразовать его в читаемый формат времени. Мне нужно передать ему аргумент и посмотреть вывод в формате, читаемом по местному времени

import optparse
import re
import time


GMT = int(time.time())
AMT = 123456789
LMT = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(LMT))


VERBOSE=False
def report(output,cmdtype="UNIX COMMAND:"):
   #Notice the global statement allows input from outside of function
   if VERBOSE:
       print "%s: %s" % (cmdtype, output)
   else:
       print output

#Function to control option parsing in Python
def controller():
    global VERBOSE
    p = optparse.OptionParser()
    p.add_option('--time', '-t', action="store_true", help='gets current time in epoch')
    p.add_option('--nums', '-n', action="store_true", help='gets the some random number')
    p.add_option('--conv', '-c', action="store_true", help='convert epoch to readable')
    p.add_option('--verbose', '-v',
                action = 'store_true',
                help='prints verbosely',
                default=False)
    #Option Handling passes correct parameter to runBash
    options, arguments = p.parse_args()
    if options.verbose:
     VERBOSE=True
    if options.time:
        value = GMT
        report(value, "GMT")
    elif options.nums:
        value = AMT
        report(value, "AMT")
    elif options.conv:
        value = LMT
        report(value, "LMT")
    else:
        p.print_help()

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Я ошибся, пытаясь получить доступ к переменной вне функции, которая меня не нажимала.

 elif options.conv:
        LMT = options.conv
        LMT= float(LMT)
        LMT = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(LMT))
        print '%s'% LMT
0 голосов
/ 28 декабря 2011

Параметры, которые вы передаете, совершенно не имеют значения. Задолго до того, как optparse даже попытается просмотреть ваши параметры, эта строка выполняется:

LMT = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(LMT))

И, как вы заметили, LMT не определен и вызовет ошибку. Я понятия не имею, что вы ожидаете от LMT в этот момент. time.localtime () преобразует количество секунд из эпохи в местное время, так как вам нужно текущее время (если я вас понимаю), вам не нужно ничего передавать.

Итак, на самом деле, вы сначала говорите, что:

python script.py -t  # It returns me current time in unixtime.

Это неправильно, это не так. Попробуйте, и вы увидите. Это дает вам NameError: name 'LMT' is not defined.

...