Pyton作为脚本文件执行的方式

Pyton作为脚本文件执行的方式使用Python编写的*.py文件可以作为脚本在命令行执行,执行的方式是:python*.py(全路径)<参数可选>但如果没有对*.py文件(即Python脚本)做一定的处理,虽然也没有报错,但不会有任何结果,还是使用斐波那契数列的例子,如下所示:执行了pythonxxx\Fi

大家好,欢迎来到IT知识分享网。

    使用Python编写的*.py文件可以作为脚本在命令行执行,执行的方式是:python *.py(全路径)<参数可选>

但如果没有对*.py文件(即Python脚本)做一定的处理,虽然也没有报错,但不会有任何结果,还是使用斐波那契数列的例子,如下所示:

Pyton作为脚本文件执行的方式

 

 执行了 python xxx\FibFunc.py 100以后,没有报错,但也没有打印出任何斐波那契数列数字,这不符合预期!!!

    既然不符合预期,那么咱们就来分析一下原因:从执行结果上看,FibFunc.py中的函数似乎是没有被执行,但调用又是正确的(因为没有报错,暂时任务是正确的),那么是什么原因导致函数没有被调用呢?会不会整个脚本都没有被调用???这就值得期待了!!!

    我们先来给FibFunc.py脚本加上一条打印语句:print(“你好,这是通过命令行调用FibFunc.py”),然后来看看执行效果:

Pyton作为脚本文件执行的方式

 

 

 

Pyton作为脚本文件执行的方式

 

 从执行结果看,FibFunc.py确实被调用了,它执行了打印语句,但是没有执行脚本中的函数fib(n),所以,可以锁定它确实是没有调用fib函数。那么我们再添加一行fib(n)的调用看看情况如何
Pyton作为脚本文件执行的方式

 

 Pyton作为脚本文件执行的方式

 

 这时候执行,提示形式参数‘m’没有被定义,换成n会有同样的执行结果!!!所以,在作为python脚本时,函数调用的参数,作为输入应该不能这样写。查阅了一些参考资料,知道这时候的参数‘m’是命令行输入的(即100),接收到的参数会被存放在sys.argv这个列表的第二个位置(即sys.argv[1]),为了验证,我们把它打印出来看看:

Pyton作为脚本文件执行的方式

 

 Pyton作为脚本文件执行的方式

 

 我们把sys.argv的第一个和第二个参数都打印出来,可以发现,第一个参数就是python脚本的全路径,第二个参数就是命令行传入的参数100(经过实验,传入的第二个参数会放在sys.argv的第三个位置,以此类推),那么我们就可以修改一下代码,在调用fib的时候不使用自定义的参数‘m’改为调用sys.argv[1],再实验一下

Pyton作为脚本文件执行的方式

 

 Pyton作为脚本文件执行的方式

 

 在这里,提示了一个“TypError”,说不支持int和str之间的实例转换,这个比较好理解,就是sys.argv[1](或者说sys.argv)是字符串形式的,再修改一下,加个强制转换试试:

Pyton作为脚本文件执行的方式

 

 至此运行成功!!!这说明,作为python脚本,在命令行中被调用时,需要手动去调用一下fib方法,那么这样修改以后,我们在解释器中能不能正常运行呢?试一下:

Pyton作为脚本文件执行的方式

 

     答案是否定的,提示sys.argv数组下标超出范围,我们打印出来看看,使用print(len(sys.argv))打印后,发现其长度为1,然后用print(sys.argv[0])打印第一个参数,会看到它的第一个参数就是脚本的全路径。也就是说,使用解释器直接运行的时候,其实默认调用的是类似python *.py的方式,但默认没有传递参数(也可以使用shift+f5执行,加入参数)。显然这个方式定义的模块不够健壮,应该要加一些限制才行!!!根据sys.argv参数的情况,我们可以给他添加一个len(sys.argv)>1的判断,这是行的通的。

    但问题是我们一般情况下不需要引入sys这个库,所以想怎么样才能在需要的时候调用它,在网上查了一些资料,知道作为脚本调用*.py的时候,它的全局变量“__name__”会被赋值为”__main__”,因此,可以通过这个做一些小修改,如下所示:

Pyton作为脚本文件执行的方式

 

 

 这样就可以在作为脚本的时候引入sys,然后打印斐波那契数列,否则不引入sys库。

 通过这个验证,可以get两个只是点:

1、*.py作为脚本运行时,其全局变量“__name__”会被赋值为“__main__”,如果是作为库导入(即使用import FibFunc),则”__name__”的值为脚本的名称(即FibFunc);

2、*.py作为脚本运行时,其参数应该从sys.argv中提取,而且所有参数均为字符串,需要根据实际情况转换后才能使用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30589.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信