• python模块中sys.argv[]使用



    一、sys 模块

    sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口。

    官方的文档参考:https://docs.python.org/2/library/sys.html
    中文版文档参考:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/

    二、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)

     

    三、结合os模块使用


    1 #test3.py
    2
    3 import sys,os
    4 a = sys.argv[1]
    5 os.system(a)

    上面的例子中,os.system接收命令行参数,运行参数指令

    四、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 ), 或者以非标准的方式处理它

    五、测试sys.stdou.flush()

    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()强制刷新缓冲区
    缓冲区的刷新方式: 1.flush()刷新缓存区 2.缓冲区满时,自动刷新 3.文件关闭或者是程序结束自动刷新
    当我们需要打印一些字符时,并不是立刻就打印,而是先将需要打印的字符放入缓冲区,在缓冲区刷新时打印,当缓冲区未满,或者程序运行未结束时,可使用sy
    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()都能一秒输出一个数字
    

      

  • 相关阅读:
    Hadoop_10_12虚拟机01_虚拟机NAT方式联网【自己的亲测笔记】
    StringUtils中 isNotEmpty 和isNotBlank的区别【java字符串判空】
    SVM
    [python]小技巧集锦
    [机器学习&数据挖掘]SVM---核函数
    [机器学习&数据挖掘]SVM---软间隔最大化
    [机器学习]SVM---硬间隔最大化数学原理
    [机器学习&数据挖掘]朴素贝叶斯数学原理
    [机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析
    [机器学习]信息&熵&信息增益
  • 原文地址:https://www.cnblogs.com/-wenli/p/9764702.html
Copyright © 2020-2023  润新知