关于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])

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


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

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

猜你喜欢

转载自blog.csdn.net/qq_22690543/article/details/80920025
今日推荐