如何读取stdin?一些代码高尔夫挑战需要使用stdin进行输入。
当前回答
这将使标准输入与标准输出相呼应:
import sys
line = sys.stdin.readline()
while line:
print line,
line = sys.stdin.readline()
其他回答
有几种方法可以做到这一点。
sys.stdin是一个类似于文件的对象,如果您想读取所有内容,或者想读取所有信息并通过换行自动拆分,则可以调用read或readlines函数。(您需要导入sys才能正常工作。)如果要提示用户输入,可以在Python2.X中使用raw_input,而在Python3中只需输入。如果您实际上只想读取命令行选项,可以通过sys.argv列表访问它们。
您可能会发现这篇关于Python中I/O的Wikibook文章也是一个有用的参考。
以下代码片段将帮助您(它将把所有stdin块读取到EOF,并将其转换为一个字符串):
import sys
input_str = sys.stdin.read()
print input_str.split()
其他人提出的答案:
for line in sys.stdin:
print line
是非常简单和Python化的,但必须注意的是,脚本将等待EOF,然后开始迭代输入行。
这意味着tail-f error_log | myscript.py不会按预期处理行。
这种用例的正确脚本是:
while 1:
try:
line = sys.stdin.readline()
except KeyboardInterrupt:
break
if not line:
break
print line
更新从评论中可以看出,在python2上可能只涉及缓冲区,因此在发出打印调用之前,您最终会等待缓冲区填充或EOF。
以下是学习Python的内容:
import sys
data = sys.stdin.readlines()
print "Counted", len(data), "lines."
在Unix上,您可以通过以下方式进行测试:
% cat countlines.py | python countlines.py
Counted 3 lines.
在Windows或DOS上,您可以执行以下操作:
C:\> type countlines.py | python countlines.py
Counted 3 lines.
试试看:
import sys
print sys.stdin.read().upper()
并通过以下方式进行检查:
$ echo "Hello World" | python myFile.py
推荐文章
- 熊猫连接问题:列重叠但没有指定后缀
- 为什么空字典在Python中是一个危险的默认值?
- 在Python中,冒号等于(:=)是什么意思?
- Python "SyntaxError:文件中的非ascii字符'\xe2' "
- 如何从psycopg2游标获得列名列表?
- Python中dict对象的联合
- 如何有效地比较两个无序列表(不是集合)?
- 如何在交互式Python中查看整个命令历史?
- 如何显示有两个小数点后的浮点数?
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列