python3 sys.stdout 方法,sys.exit方法,sys.stdin 方法

来源:互联网 发布:数据字典设计考虑 编辑:程序博客网 时间:2024/04/20 09:17

sys 模块

@(python3)

官方说明文档,python3.6 版本

sys.argv

argv 是 argument variable 参数变量的简写形式,在命令行调用的时候,有系统传递给程序。

import sysprint('打印第 2 到第 5 个元素:', sys.argv[1:5])print('打印所有参数:', sys.argv[:])for i in sys.argv:    print(i)

在终端执行:

python3.6 sucre.py we are all auguments# 结果如下打印第 2 到第 5 个元素: ['we', 'are', 'all', 'auguments']打印所有参数: ['sucre.py', 'we', 'are', 'all', 'auguments']sucre.pyweareallauguments

argv[0] 是被调用的脚本的文件全名或全路径,argv[1]和一会的就是传入的数据

也可以在 Run > Configuration > Script parameters 里面写入默认的参数。在有默认参数的情况下,就不需要去命令行执行脚本,直接在 pycharm 里面执行即可。
Alt text

import sysif __name__ = '__main__':    print('sys.argv[0] = {0}'.format(sys.argv[0]))print('sys.argv[0] = {1}'.format(sys.argv[1]))print('sys.argv[0] = {2}'.format(sys.argv[2]))

sys.stdout.write

这个方法,调用的就是 file 对象的 write 方法,区别是 file 对象的 write 方法吧字符写入到文件中,sys.stdout.write 方法把字符写入到标准输出中,也就是控制台。

stdout.write 默认不换行,print 默认换行

import sysprint('print 默认换行')sys.stdout.write('stdout.write 默认不换行')print('+++++++++')

输出结果

print 默认换行stdout.write 默认不换行+++++++++

stdout.write 配合 \n 换行符,可以实现换行的功能。

sys.stdout.write('str \n')

print 也可以实行不换行

print('str', end='')

和 print 的区别

print 几乎可以打印所有的对象,而 stdout.write 只能接受 str 类型。

import sysclass name():    def __str__(self):        return 'Citizen_Wang'a = name()print(a)print(type(a))sys.stdout.write(a)

此脚本会报错

TypeError: write() argument must be str, not name

解决方法:

sys.stdout.wirte(str(a))

从控制台重定向到文件

stdout 和 print 可以结合使用的案例。

import sysfile = sys.stdout    # 存储原始的输出对象sys.stdout = open('1.txt', 'w')  # 重定向所有的写入内容到 1.txt 文件print('Citizen_Wang')   # 写入到 1.txt 文件中print('Always fall in love with neighbours')  # 继续写入到文件中sys.stdout.close()    # 其实就是 open 文件之后的关闭sys.stdout = file  # 将 print 命令的结果返回给控制台print('输出信息返回在控制台')  # 该信息会在控制台也显示

在当前目录下创建了一个 1.txt 文件,内容如下:

Citizen_Wang
Always fall in love with neighbours

pycharm 控制台显示信息如下:

输出信息返回在控制台

同时重定向到控制台和文件

参考链接

sys.stdin

sys.stdin 和 input

import sysprint('Plase input your name: ')name = sys.stdin.readline()print('Hello ', name)

sys.exit([arg])

主程序退出的情况下使用,会引发一个异常:SystemExit,该异常并不派生自 Exception,所以用 Exception 无法捕获 SystemExit 异常,应该使用 SystemExit 捕获。

如果有捕获这个异常,直接退出程序,也可以捕获异常之后, 执行一些其他操作。

  1. 通过 Exception 无法捕获 SystemExit 异常
import systry:    print('调用退出sys.exit方法之前,执行函数')    sys.exit(0)except Exception as a:    print('information of SystemExit is {0}'.format(a))    print('捕获到异常之后执行的代码')finally:    print('最终退出')

输出结果:

调用退出sys.exit方法之前,执行函数捕获到异常之后执行的代码最终退出
  1. python3 的 except 语句默认可以捕获 SystemExit ,不加任何参数即可。
import systry:    print('调用退出sys.exit方法之前,执行函数')    sys.exit(56)    print('异常发生之后,不会执行这段代码')except:    print('捕获到异常之后执行的代码')finally:    print('最终退出')

输出结果:

调用退出sys.exit方法之前,执行函数捕获到异常之后执行的代码最终退出

3.捕获到 SystemExit 异常,并执行输出信息。sys.exit(‘information’)

import systry:    print('调用退出sys.exit方法之前,执行函数')    sys.exit('Goodbye!!!')except SystemExit as a:    print('information of SystemExit is {0}'.format(a))    print('捕获到异常之后执行的代码')finally:    print('最终退出')

输出结果:

调用退出sys.exit方法之前,执行函数information of SystemExit is Goodbye!!!捕获到异常之后执行的代码最终退出
  1. 没有捕获到 System 异常,输出信息之后,直接退出。
import systry:    print('调用退出sys.exit方法之前,执行函数')    sys.exit('Goodbye!!!')except Exception as a:    print('information of SystemExit is {0}'.format(a))    print('捕获到异常之后执行的代码')finally:    print('最终退出')

输出结果:

调用退出sys.exit方法之前,执行函数最终退出Goodbye!!!