Обычно, если я хочу определить параметр командной строки для mrjob, я должен сделать так:
class Calculate(MRJob):
def configure_args(self):
super(Calculate, self).configure_args()
self.add_passthru_arg("-t", "--time", help="output folder for time")
Когда я хочу использовать аргумент, мне просто нужно вызвать self.options.time
, но он работает только внутри этого класса.
Я хочу отслеживать время mrjob
и записывать время в файл json
вот так cal.py
:
from datetime import datetime
import json
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--time", help = "Output file")
args = parser.parse_args()
class Calculate(MRJob):
...
start_time = datetime.now()
Calculate.run()
execute_time = (datetime.now() - start_time).total_seconds()
data = {}
data["step1"] = execute_time
with open(args.time+'/time.json', 'w') as outfile:
json.dump(data, outfile)
Когда я запускаю эту команду:
python cal.py data/input/input.txt --output data/output --time data/output
Я получил эту ошибку:
usage: cal.py [-h] [-t TIME]
cal.py: error: unrecognized arguments: data/input/input.txt --output data/output
Затем я нашел ответ об использовании parse_known_args()
и попробовал:
args, unknown = parser.parse_known_args()
Теперь у меня появилась новая ошибка. Я полагаю, что это из mrjob
, потому что я удалил argparse
и запустил ту же команду, она возвращается точно так же:
usage: cal.py [options] [input files]
cal.py: error: unrecognized arguments: --time data/output
Как я могу определить аргумент, не затрагивая класс mrjob
?
mrjob
имеет собственный синтаксический анализатор, координировать аргументы командной строки сложно. - person hpaulj   schedule 16.05.2021mrjob
, чтобы он игнорировалargparse
. - person huy   schedule 16.05.2021