python执行模块文件时给文件传递参数--sys.argv

了解python的人都知道,要运行python代码可有有多种方式,比如python自带的idle可实现实时交互,也可通过pycharm集成开发环境通过鼠标右键或点击右上角运行按钮进行运行,还有一种就是在命令行中通过pyhton xxx.py来运行。接下来我们就讲解一下通过命令行运行python代码并传递参数给模块。

有时候我们在安装一些python第三方库的时候,会通过源码的方式进行安装,通过源码安装需要执行一个命令:

python setup.py install

还有在打包模块的时候也会执行一个命令:

python setup.py build

那么当我们通过命令行去执行一个python模块的时候,可不可以用这种方式传递一个或几个参数给模块内部使用呢?答案是肯定的。下面来看个例子,假如有个打印欢迎词的模块welcome.py。这个模块的功能就是打印出不同来宾的姓名及欢迎语。

示例代码

#welcome.py

print("热烈欢迎【张三】来我司莅临指导")


#调用,在命令行中执行:
python welcom.py
#输出结果:
"热烈欢迎【张三】来我司莅临指导"

运行上面的代码,没问题可以实现我们想要的功能,但是今天是张三来视察,如果明天来的是李四呢,我们还要修改源码,把张三改成李四,后天是王五来了,继续改代码。显然这样不是很合理。

改进一下,如果我们把模块里面的具体人名改成一个变量名,然后在外面调用时再把具体的人名传进去,这样就不用每天代码改来改去了,是不是会好一点呢。接下来就隆重介绍一下python中argv属性。argv是sys库中的一个列表类型的属性,这个列表中的第一个值存放的是模块的文件名,如welcome.py,后面的值就是在用命令行执行模块时传递的参数值,多个参数用空格分开。

#welcome.py

import sys

print(sys.argv)

#这时在执行python welcome.py时会输出如下结果:
["welcome.py"]

#那么在welcome.py后面再加个参数,python weclome.py zhangsan,再看一下结果:
["welcome.py","zhangsan"]

通过上面代码可以看到,在模块中成功接收到了外面传递进来的参数值。那么我们把原来的代码修改一下:

#welcome.py
import sys

name = ''
if len(sys.argv) >= 2:
    name = sys.argv[1]

print("热烈欢迎【%s】来我司莅临指导" % name)


#调用,在命令行中执行:
python welcom.py 张三
python welcom.py 李四
python welcom.py 王五
#输出结果:
"热烈欢迎【张三】来我司莅临指导"
"热烈欢迎【李四】来我司莅临指导"
"热烈欢迎【王五】来我司莅临指导"

这样就可以在不该源代码的情况下实现来我们想要的功能。

你可能感兴趣的:(技术,人生苦短,我用python)