如何在 jupyter notebook 中运行 parse_args()?收到错误 SystemExit: 2
Posted
技术标签:
【中文标题】如何在 jupyter notebook 中运行 parse_args()?收到错误 SystemExit: 2【英文标题】:How to run parse_args() in jupyter notebook? Gettiing the error SystemExit: 2 【发布时间】:2020-01-25 19:31:31 【问题描述】:我正在尝试做this Gooey GUI tutorial:,但我确实无法通过他解析参数的第一段代码。我已经尝试过 Spyder 和 Jupyter 并且已经在这个街区卡了一个小时:
from argparse import ArgumentParser
parser = ArgumentParser(description='Create Quarterly Marketing Report')
parser.add_argument('data_directory',
action='store',
help="Source directory that contains Excel files")
parser.add_argument('output_directory',
action='store',
help="Output directory to save summary report")
parser.add_argument('cust_file',
action='store',
help='Customer Account Status File')
parser.add_argument('-d', help='Start date to include')
args = parser.parse_args()
我的错误:
usage: ipykernel_launcher.py [-h] [-d D]
data_directory output_directory cust_file
ipykernel_launcher.py: error: the following arguments are required: data_directory, output_directory, cust_file
An exception has occurred, use %tb to see the full traceback.
SystemExit: 2
完整追溯:
---------------------------------------------------------------------------
SystemExit Traceback (most recent call last)
<ipython-input-24-28f93e96a3df> in <module>
----> 1 args = parser.parse_args('')
~\Anaconda3\lib\argparse.py in parse_args(self, args, namespace)
1747 # =====================================
1748 def parse_args(self, args=None, namespace=None):
-> 1749 args, argv = self.parse_known_args(args, namespace)
1750 if argv:
1751 msg = _('unrecognized arguments: %s')
~\Anaconda3\lib\argparse.py in parse_known_args(self, args, namespace)
1779 # parse the arguments and exit if there are any errors
1780 try:
-> 1781 namespace, args = self._parse_known_args(args, namespace)
1782 if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
1783 args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
~\Anaconda3\lib\argparse.py in _parse_known_args(self, arg_strings, namespace)
2014 if required_actions:
2015 self.error(_('the following arguments are required: %s') %
-> 2016 ', '.join(required_actions))
2017
2018 # make sure all required groups had one option present
~\Anaconda3\lib\argparse.py in error(self, message)
2499 self.print_usage(_sys.stderr)
2500 args = 'prog': self.prog, 'message': message
-> 2501 self.exit(2, _('%(prog)s: error: %(message)s\n') % args)
~\Anaconda3\lib\argparse.py in exit(self, status, message)
2486 if message:
2487 self._print_message(message, _sys.stderr)
-> 2488 _sys.exit(status)
2489
2490 def error(self, message):
SystemExit: 2
我已在 Stack Overflow 上检查了此错误,但建议的答案对我不起作用,或者没有详细说明问题。
我知道这应该在命令行中使用,但是有没有办法在 Jupyter 或 Spyder 中遵循上述教程?
编辑:不确定这是否有帮助,但sys.argv
的输出:
['C:\\Users\\s\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py',
'-f',
'C:\\Users\\s\\AppData\\Roaming\\jupyter\\runtime\\kernel-cc697613-14f5-4979-a353-6112886aba45.json']
【问题讨论】:
不要尝试在笔记本中运行本教程。它不适用于那种环境。 它在 Spyder 中也不起作用。你有什么建议吗?在 VSCode 中也出现同样的错误。 没有。在这种情况下我该怎么做? Spyder:“运行”菜单,“每个文件的配置”,启用并填写“命令行选项”。但一般来说,如果你想遵循教程,你应该按照教程所说的去做。它并没有说你需要 Jupyter 或 Spyder,它只是链接了一个笔记本,其中显示了将被打包到一个独立的 Python 文件中的步骤。但是笔记本本身并没有尝试完全解析命令行参数,因为笔记本中没有命令行参数。 所以我应该只是将代码复制并粘贴到文本文件中,将其保存为 .py 并运行它?而且每次我想调整某些东西时,我都必须保存文本文件然后从命令行运行它? 【参考方案1】:在笔记本或交互式会话中,您可以使用
测试argparse
设置
args = parser.parse_args('dir1 dir2 foobar'.split())
print(args)
parse_args()
解析来自 shell 命令的 sys.argv[1:]
列表。要查看它,请使用:
import sys
print(sys.argv)
您很可能会看到与jupyter
服务器相关的字符串。
当您提供一个列表时,它会被解析而不是默认。
您甚至可以使用args = argparse.Namespace(foo='bar', x=2)
。 args
只需要具有其余代码所期望的属性即可。
【讨论】:
以上是关于如何在 jupyter notebook 中运行 parse_args()?收到错误 SystemExit: 2的主要内容,如果未能解决你的问题,请参考以下文章
如何知道 Jupyter notebook 中运行的是哪个 Python?
如何在jupyter notebook中运行markdown文件(脚本代码)
如何在每个 jupyter notebook 内核之前运行 Python 代码
如何在 Jupyter Notebook 或 JupyterLab 单元中运行单行代码或选定代码?