@(python3)
官方说明文档,python3.6 版本
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 里面执行即可。
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]))
这个方法,调用的就是 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 几乎可以打印所有的对象,而 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 和 input
import sys
print('Plase input your name: ')
name = sys.stdin.readline()
print('Hello ', name)
在主程序退出的情况
下使用,会引发一个异常:SystemExit,该异常并不派生自 Exception,所以用 Exception 无法捕获 SystemExit 异常,应该使用 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方法之前,执行函数
捕获到异常之后执行的代码
最终退出
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!!!
捕获到异常之后执行的代码
最终退出
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!!!