命令行参数
sys.argv与命令行参数
用户可以在命令行中运行Python程序时输入参数,并在程序中通过sys.argv
访问。argv[0]
是Python脚本名,argv[1]
是命令行的第一个参数,此后类推。
argparse模块和命令行参数解析
argparse模块是用于解析命名的命令行参数,生成帮助信息的Python标准模块。使用argparse模块步骤如下
1 导入模块
import argpares
import argpares
2 创建ArgumentParser对象
parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser()
3 调用parser对象方法add_argument()增加要解析的命令参数信息
parser.add_argument('-- length', default = 10, type = int, help = '长度')
parser.add_argument('-- length', default = 10, type = int, help = '长度')
调用parser对象方法parse_args()解析命令行参数
args = parser.parse_args()
args = parser.parse_args()
例子
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--length", default=10, type=int, help='长度')
parser.add_argument('--width', default=5, type=int, help='宽度')
args = parser.parse_args()
area = args.length * args.width
print("面积=", area)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--length", default=10, type=int, help='长度')
parser.add_argument('--width', default=5, type=int, help='宽度')
args = parser.parse_args()
area = args.length * args.width
print("面积=", area)
image-20201013194839694
标准输入输出函数
输出函数Print
print()
函数格式如下
print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)
print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)
- sep:分隔符
- end:指定结尾字符
- file:指定文件流
- flush:是否强制写入到流
运行时输入密码
使用getpass.getpass()
函数
文件和文件对象
使用内置函数open()
用于打开或创建文件对象,语法格式如下:
f = open(file, mode='r', buffering = -1, encoding = None)
f = open(file, mode='r', buffering = -1, encoding = None)
在使用open函数时可以指定打开文件的模式为r
(只读),w
(写入,写入前删除久内容),x
(创建新文件,如果文件已存在就报错),a
(追加),b
(二进制文件),t
(文本文件),+
(更新,读写)
open函数默认打开模式为rt
,即文本读取模式
文件操作非常容易出异常,需要进行异常处理
文件的打开、写入、读取和关闭
- 打开:
open
- 写入:
write/writelines
- 读取:
read/readline
- 关闭:
close
with语句和上下文管理协议
为了简化操作,python语言中与资源相关的对象可以实现上下文管理协议。实现上下文管理协议的对象可以使用with语句
with context [as var]
with context [as var]
with语句定义了一个上下文。在执行with语句时,首先调用上下文对象的context的__enter__()
,其返回值赋给var;离开with语句块时,最后调用context的___exit__()
,以确保释放资源。
import sys
filename = sys.argv[0]
line_no = 0
with open(filename, 'r', encoding='uft8') as f:
for line in f:
line_no += 1
print(line_no, ':', line)
f.close()
import sys
filename = sys.argv[0]
line_no = 0
with open(filename, 'r', encoding='uft8') as f:
for line in f:
line_no += 1
print(line_no, ':', line)
f.close()
标准输入、输出和错误流
标准输入、输出和错误流文件对象
程序启动时,python自动创建三个文件流对象,即标准输入流文件对象、标准输出流文件对象和错误输出流文件对象
sys.stdin
sys.stdout
sys.stderr
print实际上就是调用sys.stdout.write
方法
读取任意长度的输入流
程序可以从输入流sys.stdin中读取数据直到输入流为空
标准输入、输出和错误流重定向
通过设置sys.stdin、sys.stdout和sys.stderr可以标准输入、输出和错误流重定向,例如:
f = open('out.log', 'w')
sys.stdout = f
f = open('out.log', 'w')
sys.stdout = f
这时候调用print函数,其打印的内容就会输出到out.log
中
恢复标准输入、输出和错误流为默认值的代码如下:
sys.stdin = sys.__stdin__
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
sys.stdin = sys.__stdin__
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
重定向和管道
默认情况下,标准输入来自键盘的输入,标准输出结果发送到显示屏
然后大部分情况不适合从键盘输入大量数据,这时就可以通过重定向将标准输入和输出关联的默认设备改变成另一文件、一个网络、一个程序等。
输出重定向语法格式如下
程序->输出文件
程序->输出文件
同样的标准输入:
程序
程序
管道
管道操作的语法格式如下:
程序1|程序2|...|程序n
程序1|程序2|...|程序n
image-20201013214946970
过滤器
使用管道作为命令行机制可以将多个程序串联起来。每个程序可以视为一个过滤器,过滤器通过某种形式将标准输入流转换为标准输出流。
image-20201013234434570