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

从python中的main函数之外的某个地方调用sys.argv是不好的约定

从Python中的main函数之外的某个地方调用sys.argv是不好的约定,因为sys.argv是一个命令行参数列表,通常在程序启动时由Python解释器自动填充。在main函数之外调用sys.argv可能会导致程序行为不稳定,因为在main函数之外调用sys.argv可能会在Python解释器启动时出现未定义的行为。

如果需要在main函数之外访问命令行参数,可以使用argparse模块来解析命令行参数,并将解析结果存储在全局变量中,以便在程序的其他部分使用。

以下是一个使用argparse模块解析命令行参数的示例代码:

代码语言:python
代码运行次数:0
复制
import argparse

# 创建解析器对象
parser = argparse.ArgumentParser(description='Process some integers.')

# 添加命令行参数
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

# 解析命令行参数
args = parser.parse_args()

# 将解析结果存储在全局变量中
global_args = args

在程序的其他部分,可以使用global_args变量来访问命令行参数。例如:

代码语言:python
代码运行次数:0
复制
print(global_args.integers)

这将输出命令行参数中的整数列表。

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

相关·内容

python高级-模块(14)

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下...在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具 模块就好比工具包,要想使用这个工具包中的工具,就需要先导入这个模块 二、import 在Python中用关键字import来引入某个模块,...因为函数重名并没有任何的提示,出现问题不好排查 案例: demo.py(自定义的模块) #全局变量 title = "模块1" #函数 def say_hello(): print("我是%s...因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。...Sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

71820

Python -- pdb调试工具

【简介调试工具】 pdb 使用如下代码就相当于添加断点了: import pdb     pdb.set_trace()  #设置断点的地方,放置于程序中 ipdb 相对于python,我们更趋向于ipython...,有漂亮的颜色,和补全提示,以及bash混用; 相对于python内置的pdb,ipdb的优势也正在于此,其实就是对ipython的调用: import ipdb ipdb.set_trace...有时候我们需要以后台形式执行python,此时是没有输出交互的,比如django开发,程序由uwsgi管理执行,标准输出已重定向,通常只能通过日志输出信息。...4、打印 -> p  在执行过程中我们想看,某个变量的打印值,除了c可以直接跳到下一个断点,打印期间所有值 “p”可以打印出某个变量的值,但前提是已经执行过这个变量。如下: ?...5、单步 -> s  “s”可以进入某个函数内部,然后再函数内使用n/p/b/c等 “r”将返回前面进入函数的返回语句 ?

1.3K30
  • Python 学习入门(35)—— 模块

    模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用,除了系统默认的模块(内置函数)不需要导入外。...判断语句段即可(__main__) 通过__name__变量来区分是执行模块还是导入模块其实就非常类似java中的main函数了,不同的是java中是约定的方法名称,而python中约定是变量名称,异曲同工之效...5 python解释器会将所有传递的参数存储在sys.argv这个列表中,所有的参数都被当成字符串进行处理。...同时即使不传递任何参数,也会有一个默认的参数sys.argv[0]标识当前模块的名称(如module_2.py),所以我们自己使用的参数都是从sys.argv[1]开始的,下标1表示第一个传递的参数,依次类推...因为一个大型的系统几千上万个模块是很正常的事情,如果都聚集在一起显然不好管理并且有命名冲突的可能,因此python中也出现了一个包的概念。

    74520

    scala调用python

    scala项目中调用python的几种方法 首先在工程目录某个地方建立了一个python文件 test.py import sys def addNum(a, b): return a +...b if __name__ == '__main__': a = 3 b = 7 # if args input if len(sys.argv) == 3:...).exec("python src/test.py 8 9") proc2.waitFor() 其中: 可以在命令行中带参数 本地python环境中的第三方扩展包可以正常使用 方法2:用Jpython...来调用 Jpython(http://www.jython.org/)是一个java的扩展包,在scala里面可以直接调用 首先将Jpyhon standaone的jar文件导入到scala工程并引用...python:执行语句,执行文件,调用函数,但是由于莫名其妙的原因,scala中call python的函数不能用 用Jpython的方式无法使用python本地安装的第三方扩展包,因为Jpython运行在

    2.1K30

    字符串,字节和字符编码

    (languages, encoding, error) 第 1-2 行: 以通常的命令行参数开始 第 5 行: 将代码的主体部分定义为一个叫“main"的函数,这个函数会在脚本最后运行的时候被调用。...第 6 行:这个函数所做的第一件事就是从给出的 languages 文件中读取一行。 第 8 行:这是一个 if 语句,它让你在 Python 代码中做决定。...main 函数内部又调用了 main 函数。如果一个叫 main 的函数只是跳到顶部,而我在这个函数的底部调用它,它就会回到顶部然后再次运行,这样就会形成一个循环(loop)。...记住,“DBES”说的是“解码字节”,raw_bytes 是字节,所以我对它调用了 .decode() 来获取一个 python 字符串。这个字符串应该和 next_lang 变量是一样的。...记住这个之后会跳转到第 5 行 main 函数被定义的地方,然后在第 10 行又被调用了一次,会造成它的循环。不过第 8 行的 if 语句又会阻止它无限循环。

    1K40

    安装tep

    无需额外学习新语法,精通Python语言和Python库用法,让你的代码能力直线上升。tep没有做特殊封装,只做了语法约定。tep编写自动化脚本的方法,是一种追求效率的极速写法。...接口串联 得益于一个.py文件就是一条用例的约定。接口的串联就能通过变量进行实现,从上个接口响应中取值,存入变量,放到下个接口的入参中,轻松完成。...Pairwise算法生成功能用例 Pairwise算法能针对多条件组合用例,从笛卡尔积中,根据两两组合过滤,生成更为精简的测试用例。...,调用后会执行tep.cli:main函数: import argparse import sys from tep import __description__, __version__ from...[1] == "startproject": main_scaffold(args) startproject会调用main_scaffold函数,这里面的逻辑很简单,就是创建文件夹和文件

    47910

    程序出错你让它返回啥?

    在 C 语言中,错误码的返回方式有两种:一种是直接占用函数的返回值,函数正常执行的返回值放到出参中;另一种是将错误码定义为全局变量,在函数执行出错时,函数调用者通过这个全局变量来获取错误码。...不过,网上很多人不建议函数返回 NULL 值,认为这是一种不好的设计思路,主要的理由有以下两个。...对于查找数据不存在的情况,函数到底是该用 NULL 值还是异常,有一个比较重要的参考标准是,看项目中的其他类似查找函数都是如何定义的,只要整个项目遵从统一的约定即可。...如果项目从零开始开发,并没有统一约定和可以参考的代码,那你选择两者中的任何一种都可以。你只需要在函数定义的地方注释清楚,让调用者清晰地知道数据不存在的时候会返回什么就可以了。...再补充说明一点,对于查找函数来说,除了返回数据对象之外,有的还会返回下标位置,比如 Java 中的 indexOf() 函数,用来实现在某个字符串中查找另一个子串第一次出现的位置。

    50520

    模块的使用

    #在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if判断将失败 #因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码...,最常见的就是运行测试 if __name__=='__main__': test() #里面可以写一些通过命令行运行该文件时的处理,其他模块调用该文件时这些处理是无法被执行的...作用域   在一个模块中,可能会定义很多函数和变量   在Python中,哪些函数和变量希望是给别人使用?哪些函数和变量是仅在模块内部使用?...,用python全靠自觉)        例如,在Python中,如果调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法        ..._abc等        Python并没有一种方法可以完全限制访问private函数或变量,因此只是从编程习惯上不应该引用private函数或变量,但不意味着不能引用   关于公开与非公开函数及变量的使用原则

    46520

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

    如果使用以前版本的 Windows,则基本说明是相同的,不过某些步骤中的过程可能略有不同。 第八讲 模 块 你已经看到了如何在你的程序中重复使用代码 —— 只需定义一次函数就可以对其重复调用了。...另一种方法就是用编写 Python 解释器的语言来编写模块。例如,你可以用 C 语言 来写模块,在使用标准 Python 解释器中进行编译时,这些模块会从你的 Python 代码中调用。...注意到 Python 中,数组索引从 0 开始计数而不是从 1 开始。 sys.path 是模块导入时要搜索的目录列表。...__version__ = '1.0' 上面这个是一个 模块 的例子。正如你所看见的这样,比起我们普通的 Python 程序,它并没有什么特别不一样的地方。...Python 的指导原则之一,就是「显式优于隐式」。你可以运行 import this 来了解更多的相关内容。 dir函数 内置的 dir() 函数能以列表的形式返回某个对象定义的一系列标识符。

    85210

    pycharm编写的文件如何执行_pycharm可以写java吗

    +文件名的命令,调用python程序相同 建议先使用cmd方式确认代码能够正常运行,因为如果代码在pycharm下编写执行, 可能在cmd方式下会出现缺少包的情况 */ proc = Runtime.getRuntime...); } catch (InterruptedException e) { e.printStackTrace(); } 上面给出的是一个简单的执行python文件的方法, exec(“python...而sys.argv[0]代表python程序名,所以列表从1开始读取参数。...以上代码实现一个两个数做加法的程序,下面看看在java中怎么传递函数参数,代码如下: int a = 18; int b = 23; try { String[] args = new String...[] { “python”,path,url1,url2 }; ,path是python程序所在的路径,url1是参数1,url2是参数2,以此类推。

    92320

    为什么SOA如此重要

    但为什么不允许把服务封装成一个library,提供标准的API,让调用者将其link到自己的服务中调用呢?只要API不发生变化,无论library怎么折腾,都不会影响依赖于该library的地方啊?...后来随着系统的扩张,某个新功能X选择用golang实现。不巧的是,X也需要从图片里读取exif信息这个功能。...__': main_loop() exif服务和该服务的调用者之间的约定是: 1) 调用者向5555端口发送 CMD PATH(如:EXIF http://domain.com/img.jpg)...多说几句「把服务和调用者使用的语言解耦」的重要性。 从软件工程的角度来说,这有助于项目的快速高质完成。...从软件工程师的角度来说,他们可以不必深深陷入已有系统的泥沼中,完整了解整个系统的来龙去脉,代码的曲折历史就能开始做他们该做的活。

    96760

    日志安全之linux清除日志

    我们用的常见的思路 1.直接删除日志文件 2.删除我们自己 ip 的日志内容 3.rm -rf / 如果直接删除文件,那么管理员也会从别的地方下手.或者恢复文件之类的....嫁祸给别人.水逆退散 先编写一个生成随机数的函数, 等会儿我们直接调用就行 function rand(){ min=$1 max=$(($2-$min+1)) num=$(date +%s%N)...那么我们要考虑的就是如何生成多个 ip 供我们使用..我们编写一个函数 result, 每次调用就新生成 ip 即可 function result(){ rnd1=$(rand 11 253) rnd2...$rnd4 } 最终.我们的生成随机 ip 就成功了.我们把 ip 通过 sed 插入到文件中.但是 sed 是不具备每次插入不一样的值得.我们调用 for 循环多次取 result 函数的值....通过执行脚本后, 没有10.10.10.2的记录了 ? 当然.我还是建议使用 python 完成这项工作..当日志超过10w 或者100w 级以上的数量 . bash 的执行速度就会显得极其鸡肋.

    3.7K50

    Python面向对象:杂七杂八的知识点

    为什么有这篇"杂项"文章 实在是因为python中对象方面的内容太多、太乱、太杂,在写相关文章时比我所学过的几种语言都更让人"糟心",很多内容似独立内容、又似相关内容,放这也可、放那也可、放这也不好、放那也不好...所以,用一篇单独的文章来收集那些在我其它文章中不好归类的知识点,而且会随时更新。 class、type、object的关系 在python 3.x中,类就是类型,类型就是类,它们变得完全等价。...来说,鸭子模型的意思是:只要某个地方需要调用Duck的walk、swim、quacks方法,就可以让Bird也作为Duck,因为它也实现了这3个方法。...当通过实例对象去调用方法时,或者说会自动传递self的方法是绑定方法,其它通过类名调用、手动传递self的方法调用是非绑定方法,在3.x中没有非绑定方法的概念,它直接被当作是普通函数。...在python中,要定义严格的类方法、静态方法,需要使用内置的装饰器函数classmethod()、staticmethod()来装饰,装饰后无论使用对象名去调用还是使用类名去调用,都可以。

    93821

    日拱一卒,麻省理工教你性能分析,火焰图、系统调用栈,黑科技满满

    在Python当中,我们可以使用cProfile模块来完成每个函数调用的耗时分析。这里有一个简单的例子,它实现了grep命令: #!...中的cProfile(以及其他的一些分析器)可以展示每一个函数调用的时间。...这些工具运行的时候非常快,并且如果你在代码当中使用了一些第三方库,那么这些库中的内部函数的调用也会被统计进来。...它将函数当做是节点,函数之间的调用当做是有向边进行展示。...当我们需要查看某个文件是被哪个进程打开的时候,这个命令非常有用 网络连接和配置 - ss 能帮助我们监控网络包的收发情况以及网络接口的显示信息。ss 常见的一个使用场景是找到端口被进程占用的信息。

    64120

    Python编程中的反模式

    如果迭代中一些元素可能引起异常,你需要在列表解析中通过函数调用转移可能的异常处理,或者干脆不使用列表解析。...由于print_file的调用在外作用域中(即使有缩进),这里声明的filename对于print_file函数是可见的。 那么如何避免这样的错误呢?...首先,在外作用域中不是IN_ALL_CAPS这样的全局变量就不要设置任何值[3]。参数解析最好交给main函数,因此函数中任何内部变量不在外作用域中存活。 这也提醒人们关注全局关键字global。...如果你不遵循PEP8,你应该有除“我只是不喜欢那样的风格”之外更好的理由。下边的风格指南都是从PEP8中摘取的,似乎是编程者经常需要牢记的。...工厂函数可以显式生成list; [2] string.find(str)返回str在string中开始的索引值,如果不存在则返回-1; [3] 在外作用于中不要给函数中的局部变量名设置任何值,以防止函数内部调用局部变量时发生错误而调用外部作用域中的同名变量

    1.1K60

    函数的参数

    函数的定义(一): 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字。 可以通过函数名在程序的不同地方多次执行(这通常叫函数调用)。...代码重用 避免重复劳作,提供效率 函数的定义和调用 def 函数名([参数列表]): ______定义 函数名([参数列表]) ______调用 函数名可以使用 数字+字母+下划线组成; 如果函数名有两个单词组成...例子1: 判断从键盘输入的是数字还是非数字: def fun(): sth = raw_input("pls input a number :") try: if type...下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常: #!...---- 函数的定义(二) 形式参数和实际参数 在定义函数时,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参” 在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参” 综合演练

    1.6K70

    与 coveralls 的不解之缘

    猜测 coverage 应该是记录了 pytest 调用的代码行数,然后从全部代码行记录中去除已经测试过的行记录,就是未测试的代码行,从而统计覆盖率。...main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?...,就相当于执行: /Users/aaron/py38env/bin/python3 coverage 将该文件保存到一个目录中,命名为 main.py,然后使用 PyCharm IDE 开始调试,调试的过程中...从作者的注释中可以看到 CTracer 速度非常快,而 PyTracer 相对较慢。 ? 想看 CTracer 的源代码,结果发现了这个文件 ?...下面是对 Python 官方文档对 sys.settrace 的介绍: sys.settrace(tracefunc) 用来设置系统的跟踪函数,使得用户在 Python 中就可以实现 Python 源代码调试器

    60210

    Python3 编程笔记

    -python获取文件夹大小 37 os.mkdir函数与os.makedirs函数 38 sys.argv 用法 39 super() 函数 这篇文档来自平时项目和学习过程中总结的 Python 知识点...内建函数 callable() python 中的内建函数 callable( ), 可以检查一个对象是否是可调用的 内建函数 any()/all 函数 Python 有很多内建函数,any() 和 all...global关键字:声明此变量为全局变量 在一个函数中,对全局变量进行修改的时候,是否需要使用 global 进行说明要看是否对全局变量的执行指向进行了修改如果修改了执行指向,即让全局变量指向了一个新的地方...sys.argv 用法 sys.argv[] 用来获取命令行参数,sys.argv[0] 表示文件路径本身,所以参数是从 sys.argv[1] 开始 super() 函数 深入理解 super() 函数在类的继承中...,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super() 函数来实现。

    86710
    领券