读取输入()它说"读取stdin"所以我想我可能会尝试并试图用它来读取管道。它确实如此!但只有一行(直到EOL)。所以出现的下一个问题是
如何使用input()?
从pipe(stdin)读取多行我找到sys.stdin并使用sys.stdin.isatty()来确定stdin是否绑定到tty,假设如果没有绑定到tty,则数据来自管道。所以我也成功地发现并使用了sys.stdin.readlines()来读取多行。
但仅仅是因为我的好奇心,有没有办法通过使用普通的input()函数实现相同的?到目前为止,我还没有找到一些东西"来测试"如果stdin包含更多行而不阻塞我的程序。
抱歉,如果这一切对您没有意义。
这是我的实验代码到目前为止没有输入():
import sys
if sys.stdin.isatty(): # is this a keyboard?
print( "\n\nSorry! i only take input from pipe. "
"not from a keyboard or tty!\n"
"for example:\n$ echo 'hello world' | python3 stdin.py"
""
""
)
else:
print ( "reading from stdin via pipe : \n ")
for line in sys.stdin.readlines():
print(line, end="")
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can these two lines be replaced with
# some construction using plain old input() ?
答案 0 :(得分:0)
如果您只想使用input()来访问stdin的行:
print(input()) #prints line 1
print(input()) #prints next line
但是可以说您只想访问第二行:
input() #accesses the first line
print(input()) #prints second line
让我们说您想采用第二行并创建一个数组: 标准输入:
10
64630 11735 14216 99233 14470 4978 73429 38120 51135 67060
input()
values = list(map(int, input().split(' ')))
值将等于[64630,11735,14216,99233,14470,4978,73429,38120,51135,67060]
答案 1 :(得分:-1)
您可以像其他任何可迭代对象一样迭代stdin
中的行:
for line in sys.stdin:
# do something
如果您想将整个内容读入一个字符串,请使用:
s = sys.stdin.read()
请注意,迭代s
将一次返回一个字符。