首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在python中,如何通过sys.argv将变量值按名称传递到main?

在Python中,sys.argv 是一个包含命令行参数的列表。sys.argv[0] 是脚本名称(它可能是一个脚本路径),sys.argv[1] 是第一个参数,依此类推。然而,sys.argv 本身并不支持按名称传递参数,它只支持按位置传递。

如果你想按名称传递参数,通常会使用 argparseclick 这样的库来解析命令行参数。下面我将分别给出使用这两个库的示例。

使用 argparse

argparse 是Python标准库中的一个模块,用于编写用户友好的命令行接口。

代码语言:txt
复制
import argparse

def main():
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('--var_name', type=str, help='The name of the variable')
    parser.add_argument('--var_value', type=str, help='The value of the variable')

    args = parser.parse_args()

    # 使用变量名和值
    print(f"Variable name: {args.var_name}, Variable value: {args.var_value}")

if __name__ == "__main__":
    main()

运行这个脚本时,你可以这样传递参数:

代码语言:txt
复制
python script.py --var_name my_var --var_value my_value

使用 click

click 是一个第三方库,它提供了更简洁的方式来创建命令行接口。首先,你需要安装它:

代码语言:txt
复制
pip install click

然后,你可以这样写代码:

代码语言:txt
复制
import click

@click.command()
@click.option('--var_name', type=str, help='The name of the variable')
@click.option('--var_value', type=str, help='The value of the variable')
def main(var_name, var_value):
    # 使用变量名和值
    print(f"Variable name: {var_name}, Variable value: {var_value}")

if __name__ == "__main__":
    main()

运行这个脚本的方式与使用 argparse 的示例相同。

总结

  • sys.argv 只支持按位置传递参数。
  • 如果你想按名称传递参数,可以使用 argparseclick 这样的库。
  • argparse 是Python标准库的一部分,而 click 是一个第三方库,但它的使用通常更简洁。

这两种方法都可以帮助你更方便地处理命令行参数,并允许你按名称而不是位置来引用它们。这对于创建复杂的命令行工具或脚本特别有用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用命令行界面运行Python脚本

我们可以命令行上键入不同的参数并将这些参数传递脚本,而不是每次运行脚本时都更改.py文件的代码。因此,使用CLI是非常灵活和方便的,而且,从黑屏启动程序会让你更酷,更像一个真正的程序员。...让我们看看如何通过命令行运行以下简单脚本来使用sys.argv。...导航文件所在的目录,命令提示符中键入以下命令: sys_argv.py hello world 1,2,3 这将执行sys_argv.py,并将在“sys_argv.py”之后键入的任何内容作为参数传递程序...我们的小程序,打印:sys.argv的数据类型、长度以及其中的元素,结果如下图2所示。 图2 好了,现在我们已经了解了命令行输入传递Python脚本的基础知识。...最后,我们所有解析的参数赋值一个名为args的变量,可以通过调用args.input、args.output和args.pages来访问每个参数。

2.8K30

Notes for python (1)

sys模块的argv变量通过使用点号指明——sys.argv—— 这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突。另外,它也清晰地表明了这个名称是sys模 块的一部分。...sys.argv变量是一个字符串的 列表 (列表会在后面的章节详 细解释)。特别地,sys.argv包含了 命令行参数 的列表,即使用命令行传递给你的程序的参数。...Python为我们把它存储sys.argv变 量。 记住,脚本的名称总是sys.argv列表的第一个参数。...你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来看看如何在我们别的Python程序中使用这个模块。...记住这个模块应该被放置我们输入它的程序的同一个目录,或者sys.path所列目录之一。 #!

65020
  • 最全总结 | 聊聊 Python 命令行参数化的几种方式!

    日常编写 Python 脚本的过程,我们经常需要结合命令行参数传入一些变量参数,使项目使用更加的灵活方便 本篇文章我罗列出构建 Python 命令行参数的 4 种常见方式 它们分别是: 内置 sys.argv...,所以使用时传参顺序必须固定 因此,这种方式适用于参数个数少且场景固定的项目中 import sys if __name__ == '__main__': # 获取参数列表 # 注意...) # 使用 # python3 1_sys.argv.py arg1 arg2 # 排除运行主文件参数,其他参数列表为: [arg1, arg1] # 参数总数:3 需要注意的是,脚本通过「...sys.argv 」获取的参数列表,第一个参数代表脚本主文件名称 3. argparse 内置的 argparse 模块可以非常轻松地编写出友好的命令行参数脚本,并且它能自动生成帮助使用手册,在用户给程序传入无效参数时能抛出清晰的错误信息...__': start() 然后,主运行函数上通过装饰器配置参数即可 比如,上面就定义了 3 个命令行参数 arg1、arg2、arg3,并设置了参数的类型及默认值 最后,在运行脚本时只需要按参数设定传递对应的值即可

    2.2K20

    Python 学习笔记 (4)—— 模块

    为了在其他程序重用模块,模块的文件名必须以.py为扩展名。        模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们学习如何使用标准库模块。...sys模块的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突。...Python为我们把它存储sys.argv变量。     记住,脚本的名称总是sys.argv列表的第一个参数。...模块的__name__    每个模块都有一个名称模块可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。...你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来看看如何在我们别的Python程序中使用这个模块。

    40210

    Python3脚本编程常用.md

    [TOC] 0x00 Python命令行参数 实现命令行参数输入得几种方法: sys模块的argv getopt 模块 sys.argv #!...] Error:"+str(e)) sys.exit() main(sys.argv[1:]) #向main函数传递参数 WeiyiGeek.sys.argv ----...getopt Python 提供了 getopt 模块来获取命令行参数(指定参数名称) getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv,命令行选项使得程序的参数更加灵活...案例:假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。...模块用于命令行选项、参数和子命令的解析器 基础语法: #创建解析器,ArgumentParser对象保存命令行转换成Python数据类型所需的所有信息。

    79020

    Python3脚本编程常用.md

    [TOC] 0x00 Python命令行参数 实现命令行参数输入得几种方法: sys模块的argv getopt 模块 sys.argv #!...] Error:"+str(e)) sys.exit() main(sys.argv[1:]) #向main函数传递参数 ?...案例:假定我们创建这样一个脚本,可以通过命令行向脚本文件传递两个文件名,同时我们通过另外一个选项查看脚本的使用。...,prog='TestArgumentDemo') - prog :程序名称(默认:sys.argv[0]) - usage : 描述程序使用情况的字符串(默认值:生成的fromarguments添加到解析器...应该使用的命令行参数的数量(指定参数命令行之后的输入参数个数) - nargs=2 指定参数后跟定的输入参数个数 - nargs=argparse.REMAINDER 所有剩余的命令行参数都被收集一个列表

    1K30

    Python 学习入门(35)—— 模块

    然后,我们通过F:\Pro-files\workspace\myPython\com\homer目录进入python的命令行模式,这样就可以当前目录作为工作目录,从而也就可以顺利的找到了module...判断语句段即可(__main__) 通过__name__变量来区分是执行模块还是导入模块其实就非常类似javamain函数了,不同的是java是约定的方法名称,而python约定是变量名称,异曲同工之效...5 python解释器会将所有传递的参数存储sys.argv这个列表,所有的参数都被当成字符串进行处理。...同时即使不传递任何参数,也会有一个默认的参数sys.argv[0]标识当前模块的名称(如module_2.py),所以我们自己使用的参数都是从sys.argv[1]开始的,下标1表示第一个传递的参数,依次类推...包(package),通过使用“点模块名称”创建Python模块命名空间的一种方法。例如,模块名称 A.B 表示一个名为 A的包下的名为B的子模块。

    74020

    Python黑帽编程2.6 模块

    为了在其他程序重用模块,模块的文件名必须以.py为扩展名。 模块可以从其他程序 导入以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们学习如何使用标准库模块。...图2 2.6.2 FROM..IMPORT语句 上面的示例我们通过sys.argv的方式来获取argv变量的内容,那如果我们想直接调用argv,就可以获取变量内容或进行方法调用,该如何做呢?...2.6.3 __NAME__ 每个模块都有一个名称模块可以通过语句来找出模块的名称。前面说过,当一个模块被第一次导入的时候,这个模块的主块将被运行。...我们接下来看看如何在我们别的Python程序中使用这个模块。 这个模块应该被放置我们导入它的程序的同一个目录,或者sys.path所列目录之一。 测试代码如下: #!...图5 接下来,我们不给dir函数传递参数,默认地,它返回当前模块的属性列表。 为了观察dir的作用,我们定义一个新的变量a并且给它赋一个值,然后检验dir,我们观察列表增加了以上相同的值。

    977100

    Python笔记:外部参数传入考察(一)argparse库

    简介 在编程,我们往往会遇到需要通过外部参数来控制脚本运行模式的情况,通用的框架类代码,这种情况尤为明显,因此,这里,我们来考察一下如何参数传入脚本文件,而不是作为固定参数写死脚本当中。...下面,我们考察如何写入信息。 其信息包括两部分: 整体的参数说明,这部分内容创建parser时传入; 局部每一个参数的说明,这部分内容添加每一个参数时通过help参数进行传入。...一种暴力的做法就是通过上述枚举类型输入参数限制true与false当中,然后人为的进行字符串判断重新来完成bool类型的功能。...另一方面,参数添加时,如果同时存在简称-short_name以及完整名称--full_name时,namespace的变量名会使用full_name,反之,如果二者只存在其一时,则会使用该名称。...特别地,如果需要人为指定其namespace名称,则我们可以通过参数dest来进行人为指定。 给出代码样例如下: 2.

    4.3K21

    Python入门放弃 | 超简单 跟我学(八)

    一个模块会被引入一个程序来使用它的功能。这就是我们使用 Python 标准库的方法。 标准库模块 首先,我们会了解如何使用标准库模块。...sys 模块的 argv 变量可以通过点表示法,即 sys.argv 访问。它清晰地指出这个名字就是 sys 模块的一部分。...具体来说, sys.argv 包含 命令行参数 列表,即那些使用命令行传递给程序的参数。 如果使用 IDE 编写和运行这些程序,请查找菜单为程序指定命令行参数的方法。...例: from math import sqrt print("Square root of 16 is", sqrt(16)) 模块的 __name__ 每一个模块都有一个名称模块我们可以通过判断语句来确定模块的名称...正如你所看见的这样,比起我们普通的 Python 程序,它并没有什么特别不一样的地方。我们接下来看到我们如何在另一个 Python 程序中使用到这个模块。

    84710

    Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

    注意,您没有文件名字符串直接传递给csv.reader()函数。 访问reader对象的值的最直接的方法是通过将它传递给list()➍ 来将其转换成普通的 Python 列表。... Python ,命令行参数存储sys.argv列表。APPID变量应该设置为您的帐户的 API 密钥。没有这个密钥,您对天气服务的请求将会失败。#!...因此,调用join()方法来连接除了sys.argv第一个以外的所有字符串。这个连接的字符串存储一个名为location的变量。...我们结果存储url,并将url传递给requests.get()。requests.get()调用返回一个Response对象,您可以通过调用raise_for_status()来检查它的错误。...通过编写自己的脚本,您可以让计算机处理以这些格式渲染的大量数据。 第 18 章,你脱离数据格式,学习如何让你的程序通过发送电子邮件和文本信息与你交流。

    11.6K40

    基于google protobuf的gRPC实现

    其中“=1”,“=2”表示每个元素的标识号,它会用在二进制编码对域的标识,[1,15]之内的标志符使用时占用一个字节,[16,2047]之内的标识号则占用2个字节,所以从最优化角度考虑,可以[1,15...寻址:A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么。...序列化:当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议,如TCP传递B服务器。...由于网络协议是基于二进制的,内存的参数值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输序列化的二进制发送给B服务器。...服务端,RpcChannel通过调用RpcService的CallMethod来具体调用RpcService暴露给客户端的函数。 参考 用心阁-谁能用通俗的语言解释一下什么是 RPC 框架?

    1.4K20

    详解PyQt5信号与槽的几种高级玩法

    PyQt 5信号与槽通过object.signal.connect()方法连接。 PyQt的窗口控件类中有很多内置信号,开发者也可以添加自定义信号。信号与槽具有如下特点。...GUI编程,当改变一个控件的状态时(如单击了按钮),通常需要通知另一个控件,也就是实现了对象之间的通信。早期的GUI编程中使用的是回调机制,Qt则使用一种新机制——信号与槽。...Python控制台的输出信息为: Button 1 被下了 这里重点解释onButtonClick()函数是怎样处理从两个按钮传来的信号的。...有的读者可能注意,我们一直没有解释下面这行代码的含义: QMetaObject.connectSlotsByName(QObject) 事实上,它是PyQt 5根据信号名称自动连接到槽函数的核心代码...通过前面章节的例子可以知道,使用pyuic5命令生成的代码中会带有这么一行代码,接下来对其进行解释。 这行代码用来QObject的子孙对象的某些信号按照其objectName连接到相应的槽函数。

    3.4K30

    Android gradle打包并自动上传的方法

    简介 这篇文章主要介绍Android用gradle打包,并且调用python脚本打包好的apk上传到fir.im供相关人员下载,对于学习gradle 打包和python 几个常用网络库有一定帮助 关键字...打包完成以后,把apk的路径传递python脚本即可,如何保证打包好了,就用gradle的dependsOn方法,例如打debug包,我们就可以写一个task ,这个task dependsOn ‘assembleDebug...’,这样这个task调用时,会先执行assembleDebug,然后执行里面的代码,即符合我们的需要 具体代码 //这个task 需要放在 app/build.gradle文件的android 代码块里...() // Wait till the process completes before continuing println("上传apk") //python代码里面打印的内容gradle...上传的请求格式和响应,细节可以看文档fir.im,主要是先将apk的标识信息和用户的apitoken传给fir.im,它会响应文件上传的地址和图标上传的地址,然后将对应的文件和信息传入返回的地址即可,最后通过

    2.7K61

    PyQt 5信号与槽的几种高级玩法

    PyQt 5信号与槽通过object.signal.connect()方法连接。 PyQt的窗口控件类中有很多内置信号,开发者也可以添加自定义信号。信号与槽具有如下特点。...Python控制台的输出信息为: Button 1 被下了 这里重点解释onButtonClick()函数是怎样处理从两个按钮传来的信号的。...图4 有的读者可能注意,我们一直没有解释下面这行代码的含义: QMetaObject.connectSlotsByName(QObject) 事实上,它是PyQt 5根据信号名称自动连接到槽函数的核心代码...通过前面章节的例子可以知道,使用pyuic5命令生成的代码中会带有这么一行代码,接下来对其进行解释。 这行代码用来QObject的子孙对象的某些信号按照其objectName连接到相应的槽函数。...——为了解决这个问题,我们可以创建多线程,使用主线程更新界面,使用子线程实时处理数据,最后结果显示界面上。

    4.6K30

    实战 | Python 编写端口扫描器

    介绍: 本篇学习笔记记录使用 python 编写 Scan 的学习路线,记录整个 python 扫描器的编写过程,记录从第一行代码最新版本,对每个版本更新用到的技术进行详解 Version 1.0(...进行多线程端口扫描: 更新日志: 调用 python 的 Threadpool 模块,设置多线程多目标的端口进行扫描,增加扫描的效率 #!...,传递参数的集合,该函数会将传递参数的集合分条传递函数中使用 pool.close() pool.join() print '本次端口扫描共用时 ', datetime.now() - t1 演示...“–host”等方式指定参数名称 #!...host的变量 # type='str',传递参数的类型 # metavar='host', help参数后的名称 # help='',help的语句 # parse.set_defaults(thread

    1.2K10

    命令行运行Python脚本时传入参数的三种方式

    Python参数传递(三种常用的方式) 1、sys.argv 2、argparse 3、tf.app.run 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式...使用sys.argv接收上面第一个命令包含的参数方式如下: import sys gpus = sys.argv[1] #gpus = [int(gpus.split(','))] batch_size...脚本需要定义一个接收一个参数的main方法:def main(_):,这个传入的参数是脚本名,一般用不到, 所以用下划线接收。...以batch_size参数为例,传入这个参数时使用的名称为–batch_size,也就是说,划线不会像在argparse 中一样被解析成下划线。...tf.app.run()会寻找并执行入口脚本的main方法。也只有执行了tf.app.run()之后才能从FLAGS取出参数。

    7K20
    领券