在老师的课堂里碰到了sys.stdin与sys.argv,虽然是很简单的东西,还是花了大半天的时间才勉强理解。在这里记录一下学习过程,方便以后用到复习。
一、sys.stdin
根据python3 library里的解释, sys.stdin可用于所有交互式的输入。
代码底层的逻辑不懂,这里仅记录下该方法的使用:
下面这段代码的意思是:导入sys模块,然后调用sys.stdin方法接收外部输入,将输入的每一行打印出来。
>>> import sys
>>> for line in sys.stdin:print(line)
在命令行或者python shell中执行以上代码,程序运行如下:
其中红框里黑色文字是键盘输入,蓝色文字是python shell的输出。
如果想终止输入,使用 Ctrl+D 即可。(但是,在我的电脑里Ctrl+D似乎只在Python Shell里生效,在命令行里使用没效果,只能用Ctrl+C强制终止执行)
二、sys.argv
“argv” 即 “argument value” 是一个列表对象,它可以允许你的程序从终端读取参数列表。通常用于让程序从终端读取文件名,而不是将其写入 Python 代码中。
这篇代码里有对sys.argv读取默认文件夹中的文件信息的说明。如果在命令行使用sys.argv可参考如下操作:
- 写一个lec4_mystery.py文件,其中的代码如下。该程序的作用是通过sys.argv从命令行接收一个列表List,然后输出整个列表、列表的长度,以及列表的第一个元素。
List = sys.argvprint(List)
print('Total argument passed: '+ str(len(List)))
print('Name of Python script: '+ List[0])
- 在命令行执行如下语句
python lec4_mystery.py 2 3 5 6
输出如下:
['lec4_mystery.py', '2', '3', '5', '6']
Total argument passed: 5
Name of Python script: lec4_mystery.py
可知生成的列表里,第一个元素是是执行的python文件的文件名,后面才是输入的数据。
另外,sys.argv也可用于在命令行接收输入的文件:
- 创建一个lec4_mystery.py文件,其中的代码如下。该程序的作用是通过变量myfile传入一个文档,依次读取文档的每一行,分词,并输出以"s"结尾的单词。
myfile = sys.argv[1]
for line in open(myfile, "r"):for w in line.split(" "):if w.endswith("s"):print (w)
- 在命令行输入如下指令:
python lec4_mystery.py lec4_trial_file.txt
其中,lec4_trail_file.txt的内容如下,
执行后,命令行输出如下: