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

sys 模块

@(python3)

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

sys.argv

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

import sys
print('打印第 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.py
we
are
all
auguments

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

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

import sys

if __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 sys
print('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 sys
class 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 sys
file = 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 sys
print('Plase input your name: ')
name = sys.stdin.readline()
print('Hello ', name)

sys.exit([arg])

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

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

  1. 通过 Exception 无法捕获 SystemExit 异常
import sys
try:
    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 sys
try:
    print('调用退出sys.exit方法之前,执行函数')
    sys.exit(56)
    print('异常发生之后,不会执行这段代码')
except:
    print('捕获到异常之后执行的代码')
finally:
    print('最终退出')

输出结果:

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

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

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

输出结果:

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

你可能感兴趣的:(python)