实现python代码中传递参数并且被argparse模块解析

直奔主题

我们可能会在工作中执行python脚本,并且传入指定的参数。有的时候这是第三方的脚本,那么我们下载过来自己使用的时候,反复的调用python xx.py命令反而比较麻烦。所以我想在代码里面将参数设置好,直接运行代码就好了。
例如有一个脚本:
MyTest.py:

import sys
for i in sys.argv:
    print(i)

执行如下命令:

python Mytest.py a,b,c,d

得到结果:

Mytest.py
a
b
c
d

可以看到,我们的python脚本的名字为第一个输出。
如果不想调用python脚本,传入参数,直接点开这个脚本并且在jupyter调试执行,代码就要修改成这样:

import sys
sys.argv[0:]=["MyTest.py","a","b","c","b"]
for i in sys.argv:
    print(i)

执行结果如下:

Mytest.py
a
b
c
d

没有毛病,一毛一样,在这个sys,argv当中接收的使我们传入的参数,当这个下标为0的时候,它的值就是我们的python脚本的名字。

sys.argv[0:]=["MyTest.py","a","b","c","b"]

这样写就没有什么问题了。

其他情况

有的时候第三方封装的脚本中会使用到argparse这个模块,比如说百度发布的机器学习paddle组件中有些脚本就用到了这个包,调用python脚本的时候可能是这样的:
Mytest.py

import sys
import argparse
sys.argv[0:]=["MyTest.py","a","b","c","b"]
parser = argparse.ArgumentParser()
parser.add_argument("--first_param",type=str)
parser.add_argument("--second_param",type=str)
parser.add_argument("--third_param",type=str)
parser.add_argument("--fourth_param",type=str)
for i in sys.argv:
    print(i)

调用脚本的时候:

python MyTest.py --first_param a --second_param b --third_param c --fourth_param d
MyTest.py
a
b
c
b

如果要在代码里面的话,传递的参数应该是这样的格式

import sys
import argparse
sys.argv[0:]=["MyTest.py","a","b","c","b"]
parser = argparse.ArgumentParser()
parser.add_argument("--first_param",type=str)
parser.add_argument("--second_param",type=str)
parser.add_argument("--third_param",type=str)
parser.add_argument("--fourth_param",type=str)
for i in sys.argv:
    print(i)

好像并没有什么变化,这样也能直接成功运行,好吧,百度的那个自己包装了一个方法,必须要添加一些其他参数,与这篇博文的内容没有任何关系,就这样吧。

发布了56 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/OldDirverHelpMe/article/details/102583703