在python中sys.argv[1:]是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中sys.argv[1:]是啥?相关的知识,希望对你有一定的参考价值。
抱歉,之前没说清楚。我的问题是:为何[]里会有”:“冒号?sys.argv[1:]又代表什么?
我的问题是:为何[]里会有”:“冒号?sys.argv[1:]又代表什么?这就是个分片操作
简单例子
l = [1,2,3,4,5]
l[1:],意思就是取列表l第一个元素后的值,也就是[2,3,4,5]
l[2:], -----------------[3,4,5]
还可以倒序来取
l[:-1],-----------------从右到左,取最后一个元素前面的值,[1,2,3,4]
l[:-2],-----------------[1,2,3]
而你问的sys.argv[1:],这个是你main(xxx)方法的参数,那么这个参数从哪里来
从这里来,比如
python test.py --t help --v
那么sys.argv就是['test.py', '--t', 'help', '--v']
那么sys.argv[1:]就是['--t', 'help', '--v']
分片是个很强大,很方便的功能,具体的你自己查查资料 参考技术A sys.argv 是程序传入的参数,你可以当它是个list,sys.argv[1:] 就是提取传入的参数1后面的变量。
如:test.py 'aaa' 'bbb' 'ccc' 'ddd' ,sys.argv[1:] 的值代表 [ 'bbb' , 'ccc' , 'ddd'] 参考技术B 运行main,从第二个参数开始作为main的参数传入,argv第一个参数是默认的程序的名字,不需要输入的追问
我想问那个sys.argv[1:]里面的":"冒号是什么意思?抱歉我没说清楚
python模块中sys.argv[]使用
「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。这个变量其实是一个List列表,argv[0] 一般是“被调用的脚本文件名或全路径”,这个与操作系统有关,argv[1]和以后就是传入的系统命令参数。
其实是一个从程序外部获取参数的入口,这个“外部”很关键,一般我们在命令行中运行。因为我们从外部输入的参数可以是多个,也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。
下面总结一下:
sys.argv[0]表示代码本身文件路径,所以参数从1开始.
sys.argv[1]表示第一个命令行参数
sys.argv[1:]表示从第一个命令行参数到输入的最后一个命令行参数
sys.argv[1][2:] 表示取第一个命令行参数,但是去掉前两个字节
第一种情况:
1 #test.py
2
3 import sys
4 a = sys.argv[0]
5 print(a)
第二种情况:
1 #test1.py
2
3 import sys
4 a = sys.argv[1]
5 print(a)
第三种情况:
1 #test2.py
2
3 import sys
4 a = sys.argv[1:]
5 print(a)
sys模块常用方法
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.
exit
(n) 退出程序,正常退出时
exit
(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.
exit
([arg]) 程序中间的退出,arg=0为正常退出
sys.getdefaultencoding() 获取系统当前编码,一般默认为ascii
sys.setdefaultencoding() 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding(
\'utf8\'
),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding() 获取文件系统使用编码方式,Windows下返回
\'mbcs\'
,mac下返回
\'utf-8\'
sys.path 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到
sys.platform 获取当前系统平台
sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而
print
不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
import time def main(): for i in range(50): print("程序已经运行完成:%",i/50*100) time.sleep(0.1) if __name__ == \'__main__\': main()
windows系统下执行脚本会每0.1秒执行一次
Linux系统下执行脚本会一次性输出,可以 加上 一行代码 sys.stdout.flush(),就会达到 效果了
sys.stdout.flush()强制刷新缓冲区<br> 缓冲区的刷新方式: 1.flush()刷新缓存区 2.缓冲区满时,自动刷新 3.文件关闭或者是程序结束自动刷新<br> 当我们需要打印一些字符时,并不是立刻就打印,而是先将需要打印的字符放入缓冲区,在缓冲区刷新时打印,当缓冲区未满,或者程序运行未结束时,可使用sy<br>s.stdout.flush()强制刷新缓冲区,立刻进行打印
import time def main(): for i in range(50): print("程序已经运行完成:%",i/50*100) sys.stdout.flush() #清理缓存 time.sleep(0.1) if __name__ == \'__main__\': main()
总结:
在Linux系统下,必须加入sys.stdout.flush()才能一秒输一个数字
在Windows系统下,加不加sys.stdout.flush()都能一秒输出一个数字
以上是关于在python中sys.argv[1:]是啥?的主要内容,如果未能解决你的问题,请参考以下文章