一文搞懂关于 sys.argv 的详解

 更新时间:2023年01月15日 11:41:51   作者:不渴望力量的哈  
sys.argv 其实就是一个列表,里边需要用户传入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数,通过本文学习你将明白 sys.argv很多知识,感兴趣的朋友一起看看吧

详解 sys.argv

关于 sys.argv 可得好好说道说道了。当初我可是被折磨的不要不要的,上一章节我们提到 argv 是获取程序外部的参数,返回值是一个列表。

说实话我一直在 python 解释器、idea 运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多资料,大部分都是转裁和复制的。给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道 sys.argv[0] 表示当前脚本本身文件路径的该脚本文件。后来经过大量努力,多方求教才真正明悟了,谨以记录和分享,希望能从另一个角度给同在求索过程中的同学一点启发。

sys.argv 其实就是一个从程序外部获取参数 的桥梁,这里所说的 外部 很关键,所以那些试图从代码来说明它作用的解释一直没看明白。因为我们需要先在终端执行脚本, 并从外部传入参数(可以是多个),所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[ ]提取其中的元素。其第一个元素是程序本身,随后才依次是外部传入的参数。

我们先来看一下 sys.argv 返回的是什么?

import sys
print(sys.argv)

# >>> 执行结果如下:
# >>> ['/Users/username/PycharmProjects/XXXXX/XXXXX/animal/package_sys.py']
# >>> 从执行结果可以看出 其输出的就是当前路径下的当前脚本本身,也就可以理解为 'sys.argv' 其实就是运行自身的脚本文件 
# >>> 我们从 '外部' 运行该脚本文件的时候,需要传入参数(可以是多个)

接下来我们将上面的代码改为如下:

import sys
print(sys.argv[0], sys.argv[1])
# >>> 接下来我们进入 Terminal 终端 利用 python 执行 该脚本文件,并传入 测试参数,结果如下图。

为了更好的 演示 sys.argv 属性,我们将 sys 常用的函数与属性进行一下条件判断。示例如下:

import sys
command = sys.argv[1]
if command == 'modules':
    modules = sys.modules
    print(modules)
elif command == 'path':
    path = sys.path
    print(path)
elif command == 'encoding':
    code = sys.getdefaultencoding()
    print(code)
elif command == 'platform':
    print(sys.platform)
elif command == 'version':
    print(sys.version)
else:
    print('该命令未识别')

然后在 Terminal 终端 执行该脚本,如下图:

看到这里 ,应该明白了吧?sys.argv 其实就是一个列表,里边需要用户传入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

ps:sys.argv[]的用法

一、介绍

1、sys.argv 是获取运行python文件的时候命令行参数,且以list形式存储参数

2、sys.argv[0]表示代码本身文件路径

下面我们通过一个极简单的test.py程序的运行结果来说明它的用法

import sys
a=sys.argv[0]
print(a)

将test.py保存在c盘的根目录下。

在程序中找到 ‘运行’->点击->输入"cmd"->回车键   进入控制台命令窗口(如下图),先输入cd c:\   (作用是将命令路径改到c盘根目录),然后输入test.py运行我们刚刚写的程序:

这就是0指代码(即此.py程序)本身的意思。输出的就是test.py。

如果输入的是python c:\test.py,输出就是c:\test.py

然后我们将代码中0改为1 :

a=sys.argv[1]

保存后,再从控制台窗口运行,这次我们加上一个参数,输入:test.py what

 得到的结果就是我们输入的参数what

二、简单的例子

#输入
$ python ./test.py aa bb cc
import sys
def main(argv): 
    print(argv[0])                  aa      
    print(argv[1])                  bb
    print(argv[1:])                 ['bb', 'cc']
    print(argv[1][1:])              b
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #aa
    print('sys.argv[1:]:',sys.argv[1:])     #['aa', 'bb', 'cc']
  
    print('sys.argv:',sys.argv)                 #['test1.py', 'aa', 'bb', 'cc']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #4 
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出

从上面输出结果可以看出,

sys.argv[0]是当前所执行的脚本,并且输入什么就是什么,输入test.py就是test.py,输入./test.py就是./test.py

index 1以后的才是所传入的参数。用sys.argv[1:]可以获取到所有的参数,并且输出到一个列表里面。

三、输入为 --numa=1  --numb=2 形式和  --numa 1  --numb  2 形式

 如果 python test.py --numa=1 --numb=2

则sys.argv[1:] 为 [test.py, --numa=1, --numb=2]

 如果 python test.py --numa 1 --numb 2

则sys.argv[1:] 为 [test.py, --numa, 1, --numb, 2]

#输入
$ python test.py --numa=1 --numb=2
 
import sys
def main(argv): 
    print(argv[0])                  --numa=1    
    print(argv[1])                  --numb=2
    print(argv[1:])                 ['--numb=2']
    print(argv[1][1:])              -numb=2
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #--numa=1
    print('sys.argv[1:]:',sys.argv[1:])     #['--numa=1', '--numb=2']
  
    print('sys.argv:',sys.argv)                 #['test1.py', '--numa=1', '--numb=2']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #3 
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出
 
==============================================================================
 
#输入
$ python test.py --numa 1 --numb 2
 
import sys
def main(argv): 
    print(argv[0])                  --numa   
    print(argv[1])                  1
    print(argv[1:])                 ['1', '--numb', '2']
    print(argv[1][1:])              
  
    print('sys.argv[0]:',sys.argv[0])        #test1.py
    print('sys.argv[1]:',sys.argv[1])        #--numa
    print('sys.argv[1:]:',sys.argv[1:])     #['--numa', '1', '--numb', '2']
  
    print('sys.argv:',sys.argv)             #['test1.py', '--numa', '1', '--numb', '2']
    print('type(sys.argv):',type(sys.argv))     #<class 'list'>
    print('len(sys.argv):',len(sys.argv))       #5
 
    return 0  
  
if __name__ == '__main__':  
    sys.exit(main(sys.argv[1:]))  #sys.exit(0)正常退出, sys.exit(1)非正常退出

到此这篇关于一文搞懂关于 sys.argv 的详解的文章就介绍到这了,更多相关sys.argv 是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用python爬取B站千万级数据

    使用python爬取B站千万级数据

    B站我想大家都熟悉吧,其实 B 站的爬虫网上一搜一大堆。不过纸上得来终觉浅,绝知此事要躬行,我码故我在。
    2018-06-06
  • Python中的SOLID原则实例详解

    Python中的SOLID原则实例详解

    SOLID原则是由Robert C. Martin提出的以首字母缩写命名的编码准则,它代表了五种不同的编码习惯,下面这篇文章主要给大家介绍了关于Python中SOLID原则的相关资料,需要的朋友可以参考下
    2023-02-02
  • python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图

    python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图

    这篇文章主要介绍了python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图,详细的内容需要的小伙伴可以参考一下下面文章内容
    2022-08-08
  • pytorch 转换矩阵的维数位置方法

    pytorch 转换矩阵的维数位置方法

    今天小编就为大家分享一篇pytorch 转换矩阵的维数位置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python使用tarfile模块实现免费压缩解压

    Python使用tarfile模块实现免费压缩解压

    Python自带的tarfile模块可以方便读取tar归档文件,厉害的是可以处理使用gzip和bz2压缩归档文件tar.gz和tar.bz2,这篇文章主要介绍了Python使用tarfile模块实现免费压缩解压,需要的朋友可以参考下
    2024-03-03
  • Python保姆式手把手带你掌握异常的捕获和处理

    Python保姆式手把手带你掌握异常的捕获和处理

    异常即非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处理。如果异常对象没有被处理或捕捉,程序就会执行回溯(Traceback)来终止程序
    2021-09-09
  • win8.1安装Python 2.7版环境图文详解

    win8.1安装Python 2.7版环境图文详解

    在本篇内容里小编给大家分享了关于win8.1安装Python 2.7版环境的详细步骤和方法,有兴趣的朋友们跟着学习下。
    2019-07-07
  • Python通过len函数返回对象长度

    Python通过len函数返回对象长度

    这篇文章主要介绍了Python通过len函数返回对象长度,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python表格处理模块xlrd在Anaconda中的安装方法

    Python表格处理模块xlrd在Anaconda中的安装方法

    本文介绍在Anaconda环境下,安装Python读取.xls格式表格文件的库xlrd的方法,xlrd是一个用于读取Excel文件的Python库,本文介绍了xlrd库的一些主要特点和功能,感兴趣的朋友一起看看吧
    2024-04-04
  • selenium XPath定位的实现示例

    selenium XPath定位的实现示例

    XPath是一种在XML文档中定位和选择节点的语言,通过路径表达式遍历XML树,支持节点选取、字符串匹配、数值计算、逻辑运算等功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10

最新评论