如何读取stdin?一些代码高尔夫挑战需要使用stdin进行输入。
当前回答
我非常惊讶,到目前为止没有人提到过这个黑客:
python -c "import sys; set(map(sys.stdout.write,sys.stdin))"
在python2中,您可以放弃set()调用,但这两种方法都可以
其他回答
以下是学习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.
Python还具有内置函数input()和raw_input()。请参阅内置函数下的Python文档。
例如
name = raw_input("Enter your name: ") # Python 2.x
or
name = input("Enter your name: ") # Python 3
您可以从stdin读取数据,然后将输入存储到“数据”中,如下所示:
data = ""
for line in sys.stdin:
data += line
argparse是一个简单的解决方案
与Python版本2和3兼容的示例:
#!/usr/bin/python
import argparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('infile',
default=sys.stdin,
type=argparse.FileType('r'),
nargs='?')
args = parser.parse_args()
data = args.infile.read()
您可以通过多种方式运行此脚本:
1.使用stdin
echo 'foo bar' | ./above-script.py
或更短,方法是将echo替换为here字符串:
./above-script.py <<< 'foo bar'
2.使用文件名参数
echo 'foo bar' > my-file.data
./above-script.py my-file.data
3.通过特殊文件名使用stdin-
echo 'foo bar' | ./above-script.py -
以下代码片段将帮助您(它将把所有stdin块读取到EOF,并将其转换为一个字符串):
import sys
input_str = sys.stdin.read()
print input_str.split()
推荐文章
- “克隆”行或列向量
- 在python shell中按方向键时看到转义字符
- 在pip install中方括号是什么意思?
- 使用Matplotlib以非阻塞的方式绘图
- 使用sklearn缩放Pandas数据框架列
- 如何创建关键或附加一个元素的关键?
- virtualenv的问题-无法激活
- 是否可以使用scikit-learn K-Means聚类来指定自己的距离函数?
- 如何在Python中删除文本文件的文件内容?
- 一个干净、轻量级的Python扭曲的替代品?
- 在Python中从字符串中移除所有非数字字符
- 在Python中,如何以排序的键顺序遍历字典?
- Python中的多行f-string
- 批量归一化和退出的排序?
- Python中的“@=”符号是什么意思?