关于python的sys模块sys.argv[0]、sys.argv[1]、sys.argv[2]的探讨

今天有刚学python的朋友问我他的python怎么运行报错

他的源代码是:

 

import sys #导入sys模块

input_file = sys.argv[1]
output_file = sys.argv[2]
 
with open(input_file,'r',newline='') as filereader:
with open(output_file,'w',newline='') as filewriter:
header = filereader.readline()
header = header.strip()
header_list = header.split(',')
print(header_list)
for row in filereader:
row = row.strip(',')
row_list = row.split(',')
print(row_list)
filewriter.write(','.join(map(str,row_list))+'\n')

 

我也不知道源代码错还是对,但是他运行直接运行py文件,之后就不用想报错啊

    input_file =  sys.argv[1]

IndexError: list index out of range

原因是input_file 是其读取文件的文件名没有输入,但这个是由sys.argv[1]接受,所以会报错。

下面说明python的sys模块sys.argv[0]、sys.argv[1]、sys.argv[2]是什么意思、该怎么理解?

看一下python代码:


import sys

test = sys.argv[0]
test1 = sys.argv[1]
test2 = sys.argv[2]
print(test)
print(test1)
print(test2)
 

运行这个py文件,直接运行也会报错

然后我们这样运行

会打印出信息并不会报错这是为什么尼?

test打印的信息是:文件路径

test1打印的信息是:111

test2打印的信息是:222

这才知道sys.argv[0]接收的是文件名(如果运行文件和运行终端不在同一路径下会接收其的路径及文件名)

sys.argv[1] 接收的的在终端传入的第一个参数

sys.argv[1]接收的的在终端传入的第二个参数

在看下面代码,进一步进行了解

import sys

list1 = ["111","222","333"]
print(list1)
print(list1[0])
 
list2 = sys.argv
print(list2)
print(list2[1])
print(sys.argv[1])

采用上述方法运行,会有如下图结果

关于python的sys模块sys.argv[0]、sys.argv[1]、sys.argv[2]的探讨_第1张图片

这才恍然大悟原来sys模块sys.argv是个列表,而sys.argv[0]、sys.argv[1]、sys.argv[2]只不过是在取列表中的值,但这个列表有我们决定。

这才朋友的那个运行应该是这样的:test.py 1.txt 2.txt

你可能感兴趣的:(python随笔)