在iPython笔记本中使用Argparse:未识别的参数:-f。

20
我正在尝试将一个.py文件传递到ipython笔记本环境中。我以前从未直接处理过argparse。如何重写main()函数?
我尝试删除def main():这一行,并保留其余代码。
但是args = parser.parse_args()返回了一个错误:

ipykernel_launcher.py: error: unrecognized arguments: -f.

当我运行.%tb时,显示如下:showing this
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str, default='data/tinyshakespeare',
                   help='data directory containing input.txt')
parser.add_argument('--input_encoding', type=str, default=None,
                   help='character encoding of input.txt, from https://docs.python.org/3/library/codecs.html#standard-encodings')
parser.add_argument('--log_dir', type=str, default='logs',
                   help='directory containing tensorboard logs')
parser.add_argument('--save_dir', type=str, default='save',
                   help='directory to store checkpointed models')
parser.add_argument('--rnn_size', type=int, default=256,
                   help='size of RNN hidden state')
parser.add_argument('--num_layers', type=int, default=2,
                   help='number of layers in the RNN')
parser.add_argument('--model', type=str, default='lstm',
                   help='rnn, gru, or lstm')
parser.add_argument('--batch_size', type=int, default=50,
                   help='minibatch size')
parser.add_argument('--seq_length', type=int, default=25,
                   help='RNN sequence length')
parser.add_argument('--num_epochs', type=int, default=50,
                   help='number of epochs')
parser.add_argument('--save_every', type=int, default=1000,
                   help='save frequency')
parser.add_argument('--grad_clip', type=float, default=5.,
                   help='clip gradients at this value')
parser.add_argument('--learning_rate', type=float, default=0.002,
                   help='learning rate')
parser.add_argument('--decay_rate', type=float, default=0.97,
                   help='decay rate for rmsprop')
parser.add_argument('--gpu_mem', type=float, default=0.666,
                   help='%% of gpu memory to be allocated to this process. Default is 66.6%%')
parser.add_argument('--init_from', type=str, default=None,
                   help="""continue training from saved model at this path. Path must contain files saved by previous training process:
                        'config.pkl'        : configuration;
                        'words_vocab.pkl'   : vocabulary definitions;
                        'checkpoint'        : paths to model file(s) (created by tf).
                                              Note: this file contains absolute paths, be careful when moving files around;
                        'model.ckpt-*'      : file(s) with model definition (created by tf)
                    """)
args = parser.parse_args()
train(args)

我经常使用 ipython,但不使用笔记本。但如果我正确地回忆起其他 SO,你不能将特定于脚本的命令行参数传递给笔记本。您只能使用 ipython 用于启动服务器的参数。您正在使用哪个命令行(包括 -f 标志)?https://stackoverflow.com/questions/43057529/how-to-pass-command-line-arguments-in-ipython-jupyter-notebook - hpaulj
这个错误是由哪个命令行引起的? - holdenweb
4个回答

49

您可以尝试使用 args = parser.parse_args(args=[])


10

如 @nbro 所建议的,以下命令应该有效:

args = parser.parse_args(args=[])

此外,如果您的解析器中有必选参数,请将它们设置在列表内:
args = parser.parse_args(args=['--req_1', '10', '--req_2', '10'])

之前您所使用的是:

import argparse
parser = argparse.ArgumentParser(description="Dummy parser")
parser.add_argument("--req_1", type=int, required=True, help="required int 1")
parser.add_argument("--req_2", type=int, required=True, help="required int 2")

您也可以从笔记本中查看所有参数:
print("see all args:", args)
print("use one arg:", args.req_1)

你可以在文档中找到更多信息:解析参数

我可以从其他笔记本传递所需的参数值吗? - Alaa M.

9
最好使用 @nbro 的解答来执行 Jupyter。
args = parser.parse_args(args=[])

如果您想将参数以类格式管理,可以尝试这个方法。
class Args:
  data = './data/penn'
  model = 'LSTM'
  emsize = 200
  nhid = 200

args=Args()

1
@nbro的解决方案更简单,不需要修改现有的解析器。 - partizanos

1
一个例子是:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo')
args = parser.parse_args(['aa']) # actually you don't have to write (args=['aa'])
print(args.echo)

输出应该是。
>>> aa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接