一、sys模块
通过sys.argv()函数访问命令行参数,sys.argv()生成的是一个列表,argv[0]访问脚本,argv[1]访问第一个参数,argv[2]访问第二个参数。
例1、通过调用命令行参数n,生成n个随机数。
#访问命令行
import sys,random
n = int(sys.argv[1]) #调用命令行第一个参数,即n
for i in range(n): #循环生成n个随机数并打印
print(random.randrange(0,100))
注:在调用程序时,需要在命令行输入n的具体值。若在IDLE操作系统中,需要在运行(Run)的下拉菜单中选择Run...Customize选项中输入参数值。
例2、输入n个整数并求和,n由命令行参数决定。
import sys
n = int(sys.argv[1]) #设置n的值为命令行参数
sum = 0
for i in range(n):
number = int(input("请任意输入一个整数:")) #input()输入
sum +=number
print('累加结果为:',sum)
注:在本例中固定了输入整数的个数n,也就是必须输入n个数整个程序才会运行结束,这一过程不是交互式输入;在例5中将展示交互式用户输入,输入的次数是随机的依赖于用户的输入值。
例3、读取并输出本脚本文件。
import sys
filename = sys.argv[0] #访问脚本名
f = open(filename,'r',encoding='utf8') #open()函数读取了脚本文件,f是文件对象,r表示以只读方式打开
line_no = 0
while True:
line_no += 1 #行数计数
line = f.readline() #文件对象的readline()函数读取一行文本
if line: #用来判断line变量是否有值
print(line_no,':',line)
else:
break
f.close()
在这个例子中使用open()函数读取了一个脚本文件,open()函数也可以用来读取文本文件和二进制文件等其他文件类型,生成文件对象。readline()就是一个文件对象方法,用来逐行读取文件内容。
注:在使用open函数读取文件后,必须要在最后再用close函数关闭文件,否则这个文件就会一直处于读取的状态,其他的程序将无法调用;否则,可以使用with语句。
二、argparse模块
argparse模块进行参数解析的特定使用方法:
- 创建解析器。首先导入argparse模块之后,创建一个ArgumentParser对象,作为命令行解析的起点。
- 添加参数。使用add_argument()函数对上述ArgumentParser对象定义可接受的命令行参数,同时可以指定参数的名称、类型、默认值、帮助信息等。
- 解析参数。parse_args()函数用来解析命令行参数,生成一个列表。
- 访问参数。通过第2步参数名来访问。
例4、解析命令行参数所输入的长方形的长和宽的值,计算输出面积。
import argparse #用户友好的命令行接口
parser = argparse.ArgumentParser() #创建ArgumentParser对象是一个解析器
parser.add_argument('--length',default=10,type=int,help='长度') #添加参数length
parser.add_argument('--width',default=5,type=int,help='宽度') #添加参数width
args = parser.parse_args() #解析参数
area = args.length * args.width #访问参数并计算
print('面积=',area)
注:此时要调用脚本时命令行的输入要包含参数名,参数可以调换顺序。 例如:在命令行输入--length 3 --width 4 和 --width 4 --length 3,结果是一样的。若命令行没有参数值,则输出参数默认值的计算结果。
三、一个交互式用户输入例子
例5、输入批量数据,当输入-1时终止输入,统计输入数据的个数并对其求和、求平均值。
a = [] #定义空的列表用来存放输入的数据
x = float(input("请输入一个实数,输入-1则终止:")) #输入第一个值
while x != -1:
a.append(x)
x=float(input("请输入一个实数,输入-1则终止:"))
print("计数",len(a))
print("求和",sum(a))
print("均值",sum(a)/len(a))
标签:Python,输入输出,argv,sys,参数,命令行,print,输入
From: https://blog.csdn.net/fdhjflbj/article/details/137080741