【问题标题】:python mrjob: ignore unrecognized argumentspython mrjob:忽略无法识别的参数
【发布时间】:2021-08-05 16:54:29
【问题描述】:

通常,如果我想为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()answer 并尝试了它:

args, unknown = parser.parse_known_args()

现在,我遇到了一个新错误。我相信这是来自mrjob,因为我确实删除了argparse 并运行相同的命令,它返回完全像这样:

usage: cal.py [options] [input files]
cal.py: error: unrecognized arguments: --time data/output

如何在不影响mrjob 类的情况下定义参数?

【问题讨论】:

  • 如果mrjob 有自己的解析器,那么协调命令行参数是很棘手的。
  • @hpaulj 是的,没错,这就是为什么我必须在 mrjob 类中再次定义参数以使其忽略 argparse

标签: python argparse mrjob


【解决方案1】:

我找到了一个变通的解决方案,但我希望有更好的方法来做到这一点。

我必须在 mrjob 类中再次定义参数,以便它可以识别它:

from datetime import datetime
import json
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-t", "--time", help = "Output file")
args, unknown = parser.parse_known_args()

class Calculate(MRJob):
    def configure_args(self):
        super(Calculate, self).configure_args()
        self.add_passthru_arg("-t", "--time", help="output folder for time")

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

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2012-09-17
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多