文件作为 argparse 的命令行参数 - 如果参数无效,则出现错误消息

2023-12-19

我目前正在使用 argparse,如下所示:

import argparse
from argparse import ArgumentParser

parser = ArgumentParser(description="ikjMatrix multiplication")
parser.add_argument("-i", dest="filename", required=True,
    help="input file with two matrices", metavar="FILE")
args = parser.parse_args()

A, B = read(args.filename)
C = ikjMatrixProduct(A, B)
printMatrix(C)

现在我想指出的是,-i应该是一个可读的文件。我怎样才能做到这一点?

我尝试过添加type=open, type=argparse.FileType('r')他们工作了,但如果文件无效,我想收到一条错误消息。我怎样才能做到这一点?


实际上这很容易。您只需要编写一个函数来检查文件是否有效,否则写入错误。将该函数与type选项。请注意,您可以通过子类化来获得更多创意并创建自定义操作argparse.Action,但我认为这里没有必要。在我的示例中,我返回一个打开的文件句柄(见下文):

#!/usr/bin/env python

from argparse import ArgumentParser
import os.path


def is_valid_file(parser, arg):
    if not os.path.exists(arg):
        parser.error("The file %s does not exist!" % arg)
    else:
        return open(arg, 'r')  # return an open file handle


parser = ArgumentParser(description="ikjMatrix multiplication")
parser.add_argument("-i", dest="filename", required=True,
                    help="input file with two matrices", metavar="FILE",
                    type=lambda x: is_valid_file(parser, x))
args = parser.parse_args()

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

文件作为 argparse 的命令行参数 - 如果参数无效,则出现错误消息 的相关文章

随机推荐

  • 绘制特定行的每个列值

    我正在努力从数据框中绘制特定行 下面是我试图绘制的图表 我尝试过使用 ggplot 和普通图 但我无法弄清楚 Wt2 Wt3 Wt4 Wt5 Lngth2 Lngth3 Lngth4 Lngth5 1 48 59 95 82 141 157
  • PIL和cv2中不同的像素信息

    我已经使用两者加载了相同的图像PIL and cv2 但是对于相同的索引 像素信息是不同的 这是我的代码 import cv2 from PIL import Image img cv2 imread Fruits1 jpg Can be
  • 如何更改 Bootstrap 的轮播过渡从幻灯片到淡入淡出

    我在更改 AngularUi 的转换时遇到了一个小问题点击这里 http angular ui github io bootstrap 轮播过渡 我想将轮播的标准滑动过渡更改为fadeIn FadeOut过渡点击这里 http plnkr
  • 加载布局时出现异常:java.util.LinkedHashMap.eldest()Ljava/util/Map$Entry;

    尝试在图形编辑视图中加载特定布局文件时 出现以下异常 这是我下载最新版本后开始的ADT Version 20 and SDK API Level 16 java lang NoSuchMethodError java util Linked
  • Riverpod FutureProvider 在添加 .family 修饰符后将继续触发

    所以我未来有这样的提供者 final additionalCostsProvider FutureProvider autoDispose family
  • 在排序的 pandas 数据框中按时间戳搜索元素

    我有一个非常大的熊猫数据框 系列 包含数百万个元素 我需要找到时间戳小于 t0 的所有元素 所以通常我会做的是 selected df df df index lt t0 这需要很长时间 据我了解 当 pandas 搜索时 它会遍历数据帧的
  • 移动电话 - 它可以通过无线电频率进行编程广播吗?

    是否有可能让手机以特定频率发射任意无线电波 或者移动操作系统只允许更高级别的访问 如果答案是 否 正如我所期望的那样 有没有办法让手机与另一个电子设备远程通话 而无需握手等 可能不会 正如 EFraim 指出的那样 将会有适当的监管框架规定
  • 以有限优先级启动子进程

    我正在寻找一种如何使用 Python 启动进程的方法subprocess系统优先级较低的模块 我已经发现 解决方案Unix https stackoverflow com questions 2463533 is it possible t
  • Ansible:如何将文件远程复制到远程

    我需要复制文件 etc resolv conf从远程主机并将其复制到多个远程主机上 my hosts Ansible ubuntu1 4 我想从以下位置复制此文件ubuntu1 to ubuntu2 ubuntu3 and ubuntu4我
  • Rails:在请求范围内共享信息

    Rails 中在当前请求范围内共享信息的机制是什么 熟悉 Asp Net 的人会知道 有一个 HttpContext 可用于请求期间调用的所有实体 Rails 中有类似的东西吗 With around filter and Thread c
  • Javascript数组非未定义元素计数

    我创建一个数组let arr new Array 99999 但我没有把它填满arr length这是99999 我怎么知道有多少实际的 非undefined这个数组中有元素吗 有没有比寻找第一个更好的方法undefined 你可以使用Ar
  • Google Calendar API 返回 invalid_grant 和错误请求

    在我的开发环境中 我有一个用户刚刚收到以下范围的 OAuth 令牌 https www googleapis com auth calendar https www googleapis com auth calendar https ww
  • 集成测试私有类和方法

    对于单元测试 您不应该测试私有方法 是的 但是对于集成测试 使用 MSTest 或 NUnit 等单元测试框架 我非常希望针对测试 url 运行内部 API 调用 以确保当前代码当第三方 API 供应商更改其后端时有效 考虑到系统的复杂性
  • 替代 sql server 2008 中的 First_Value()

    我有以下查询 它在 Oracle 和 DB2 中运行良好 但它在 SQL Server 2008 中不起作用 因为 First Value 函数不可用于相同的 2008年有解决办法吗 select NameGuid Name Ancesto
  • 如何选择 select2 JavaScript 多选中的所有选项

    有一天 我试图弄清楚如何选择 select2 v3 5 1 JavaScript 多选控件中的所有项目 我尝试了一些事情 但我很难弄清楚如何去做 我只想选择框中的每个选项 但显然 select2 没有内置选项来为您选择所有项目 对于 sel
  • 使用 MVC 的多表模型?

    我刚刚开始使用 MVC 一旦我设法将想法转向它 这似乎将是一个很好的方法 我遇到的大多数材料似乎在模型 视图和表之间具有 1 1 的关系 即每个模型代表一个表并允许 CRUD 以及更复杂的功能 如果我有一个允许帐户创建和更新的帐户模型怎么办
  • STATHREAD 和主线程

    我不完全理解 STATHREAD 属性的作用http msdn microsoft com en us library system stathreadattribute aspx http msdn microsoft com en us
  • 哪些技术最适合我的应用程序:Struts 与 Hibernate 或 Spring 与 Hibernate

    我有 Struts2 和 Spring 的工作知识 我想开发一个管理多个公司信息的应用程序 我完全不知道什么技术最适合我的应用程序 例如 Struts2 Hibernate MVC 和 Spring 有人可以帮助我选择合适的技术吗 以下是您
  • 空的“期望:”标题有什么意义吗?

    许多图书馆包括Expect 100 continue默认情况下 在所有 HTTP 1 1 POST 和 PUT 请求上 我打算通过在客户端上删除那些请求的 100 Continue 机制来减少感知延迟 对于这些请求 我知道立即发送数据的费用
  • 文件作为 argparse 的命令行参数 - 如果参数无效,则出现错误消息

    我目前正在使用 argparse 如下所示 import argparse from argparse import ArgumentParser parser ArgumentParser description ikjMatrix mu