调试时模拟 argparse 命令行参数输入

2023-12-28

该线程是上一个线程的扩展,可以找到here https://stackoverflow.com/questions/50881403/debugging-argpars-in-python。 比如说,我有一个代码有两个用途,1)从整数列表中打印最大数字; 2)创建一个新目录。

import argparse
import os

parser = argparse.ArgumentParser()
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=sum,
                    help='sum the integers (default: find the max)')

parser.add_argument("--output_dir", type=str, default="data/xx")

def main(args):
    os.makedirs(args.output_dir)
    print args.accumulate(args.integers)

if __name__=='__main__':
    args = parser.parse_args()  # Disable during debugging @ Run through terminal
    # args = argparse.Namespace(integers = 1, output_dir= 'mydata_223ss32')  # Disable when run through terminal: For debugging process
    main(args)

这些语句可以从终端执行

python test_file.py --output_dir data/xxxx 2 2 5 --sum

但是,对于调试过程,我想跳过终端的使用。这个想法由hpaulj https://stackoverflow.com/users/901925/hpaulj可以发现here https://stackoverflow.com/questions/50881403/debugging-argpars-in-python只是简单地修改了

if __name__=='__main__': 

into

if __name__=='__main__':
    args = argparse.Namespace(output_dir= 'mydata')  # Disable when run through terminal: For debugging process
    main(args)

但是,我还想在调试过程中包含一个整数列表。包括整数列表和目录地址,如下所示输出错误

args = argparse.Namespace(integers = "2 2 5", output_dir= 'mydata') 

我可以知道我哪里做错了吗?

提前致谢


通过稍微改变你的代码:

import argparse
import sys

parser = argparse.ArgumentParser()
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=sum,
                    help='sum the integers (default: find the max)')

parser.add_argument("--output_dir", type=str, default="data/xx")

def main(args):
    #os.makedirs(args.output_dir)              # XXX: Commented out for debugging
    print(args.accumulate(args.integers))

if __name__=='__main__':
    print(sys.argv)
    args = parser.parse_args()  # Disable during debugging @ Run through terminal
    # args = argparse.Namespace(integers = 1, output_dir= 'mydata_223ss32')  # Disable when run through terminal: For debugging process
    print(args)
    main(args)

我们可以看到,如果我们使用以下命令调用脚本:./test3.py --output_dir foo 1 2 3

我们的输出是:



['test3.py', '--output_dir', 'foo', '1', '2', '3']
Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3], output_dir='foo')
6
  

因此,如果您想模拟命令行参数,您有两个选择:

1) Edit sys.argv(个人首选):

if __name__=='__main__':
    # Override sys.argv
    sys.argv = ['test3.py', '--output_dir', 'foo', '1', '2', '3']
    args = parser.parse_args()
    main(args)

2)创建一个Namespace object:

if __name__=='__main__':    
    #args = parser.parse_args()  # Disable during debugging @ Run through terminal
    args = argparse.Namespace(accumulate=sum, integers=[1,2,3], output_dir='foo')
    main(args)

第二种方法的问题有两个。首先,通过执行此操作,您将跳过调试过程中非常重要的部分,调试 argparse 配置并确保按照您的预期解析参数。其次,必须在此处定义由 argparse 配置添加的隐式默认值(例如,您的--sum争论/accumulate)。如果您采用第一种方法,argparse 将处理sys.argv并添加累积,而无需进行任何更改。在第二种方法中,我们必须添加accumulate=sum让它按预期运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试时模拟 argparse 命令行参数输入 的相关文章

随机推荐

  • is_assignable<> 的结果不一致[重复]

    这个问题在这里已经有答案了 可能的重复 is convertible is assignable 和 有什么区别 https stackoverflow com questions 13952404 what is the differen
  • Rails 3 邮件发送问题

    我正在使用 Rails 3 并实现电子邮件发送功能 我不确定我的配置是否正确 但这是我的代码 邮件程序 user mailer rb class UserMailer lt ActionMailer Base default from gt
  • 组件测试中的角度单击选择选项

    我已尝试以下操作来尝试单击选择下拉列表中的选项 但没有任何效果 selectEl fixture debugElement query By css dropdown selectEl nativeElement options 3 nat
  • 如何使用博主视频作为 iframe(错误 400)

    我有一个网站 我使用博客中托管的视频作为 iframe 代码如下所示 多年来它运行得很好 但目前它显示一条错误消息 Bad Request Error 400 但现在博主需要令牌才能观看博主上托管的视频 链接现在如下所示 https www
  • 如何使用执行选择器在特定时间段后将函数与参数联系起来

    我是这个 iPhone 应用程序编程的新手 我有一个函数 其参数类型作为结构指针 如下所示 void responce structurePtr someData 我想使用调用这个函数performselector method5秒的时间间
  • ES6 模块如何作为 Node 中的脚本运行?

    ES6 模块如何作为 Node 中的脚本运行 当我尝试这个 shebang 时 我收到一个错误 usr bin env node experimental modules usr bin env node experimental modu
  • 暂停线程的执行而不休眠?

    我正在使用 Skype API 它每次收到一条消息都会发回一条消息 我不确定这是否真的is是什么原因造成的 但这是我能得到的最接近的结果 当我发送太多消息时 COM 控件无法处理所有回复 这会导致整个应用程序崩溃 当我使用时会发生这种情况f
  • 为什么 Silverlight 不处理我的自定义浮点属性的转换

    在 Silverlight 4 项目中 我有一个扩展 Canvas 的类 public class AppendageCanvas Canvas public float Friction get set public float Rest
  • 如何计算 pandas 中事件之间的时间

    原始问题 我陷入了以下问题 我试图找出车辆在工厂存放的具体时间和时间 我有一个 Excel 工作表 其中存储了所有事件 这些事件要么是交付路线 要么是维护事件 最终目标是获得一个数据帧 其中给出了车辆登记号以及相应的到达工厂和在那里花费的时
  • GWT - DialogBox.center() 无法正常工作

    我的页面上有一个带有按钮的表格 按钮太多了 我有一个滚动条可以向下滚动表格 按钮 onClick 生成一个对话框 其中包含滚动面板 内容和用于关闭该对话框的按钮 我使用 DialogBox center 将其居中 当我按下表格中的第一个按钮
  • 如何将模拟器连接到 laravel 服务器 localhost:8000

    当我的 Android 应用程序使用 10 0 0 2 8080 连接到 wampserver 中的项目时 我可以连接到 localhost 8080 但我使用 laravel 并且我的 Web 服务位于 localhost 8000 我想
  • Bootstrap 响应式附加菜单

    我想要一个固定菜单 如引导文档 http twitter github com bootstrap base css html 与引导文档上一样 它没有贴在手机上 我有以下代码 div class container div class r
  • 为什么我应该将实现的接口方法声明为“公共”?

    interface Rideable String getGait public class Camel implements Rideable int weight 2 String getGait return mph lope voi
  • 如何在 Windows 10 Powershell 上使用 npm 脚本递归复制整个目录?

    如何在 Windows 10 Powershell 上使用 npm 脚本递归复制整个目录 现在我有以下树 test 1 package json 2 src asd txt asd asd Copy 2 txt asd Copy txt a
  • 如何从通过 Javascript 加载的页面上 __scrape__ 数据

    我想使用 beautifulsoup 刮掉此页面上的评论 https www x s com video id the suburl 评论通过 JavaScript 在点击时加载 评论是分页的 每个页面也会在点击时加载评论 我希望获取所有评
  • Eclipse 的选项卡双击 Visual Studio?

    在 Eclipse 上 每当我双击选项卡时 它就会填充工作区 通过隐藏所有其他视图 如项目树 控制台等 有没有办法在 Visual Studio 上做到这一点 注意 我不是在寻找全屏 只是想要一种整理工作区但仍然可以访问菜单的方法 你在追寻
  • 训练过程中GAN结果图像是相同的

    我正在尝试在 MNIST 数据集上训练 GAN 该代码现在的训练结果好坏参半 问题似乎是生成的图像实际上都是相同的 您可以在下面找到我的完整代码 我尝试环顾四周 看看是否有解决方案 我发现唯一提到的使用randn代替rand但我没有使用ra
  • Summernote 显示已上传到文件夹的图像

    我正在使用非常好的 Summernote 编辑器来构建一个小型网络应用程序 我没有使用图像的默认内联 base64 代码 而是将图像存储在文件夹中 我让那部分按预期工作 我可以单击 图像 图标并选择一个图像 它会以其原始类型 jpg png
  • 如何在网站上嵌入Python解释器

    我正在尝试建立一个教育编码网站 类似于代码学院 http www codecademy com 但坦率地说 我不知道应该采取什么步骤 我能否指出正确的方向 在 web 应用程序中包含一个简单的 python 解释器 一种选择可能是使用 Py
  • 调试时模拟 argparse 命令行参数输入

    该线程是上一个线程的扩展 可以找到here https stackoverflow com questions 50881403 debugging argpars in python 比如说 我有一个代码有两个用途 1 从整数列表中打印最