[英]input() after readlines() from sys.stdin?
我有一个案例,我的脚本在sys.stdin
上调用readlines()
,然后调用input()
,但最后一次调用不起作用。
这是我的脚本:
import click
@click.command()
@click.argument('data', type=click.File())
def inp(data):
lines = data.readlines()
print('Read {} lines. Continue?'.format(len(lines)))
choice = input().lower()
print("You said '{}'.".format(choice))
if __name__ == '__main__':
inp()
如果用户在命令行上指定了实际的文件参数,则脚本可以正常工作,但如果他们 pipe 输入数据并使用-
则不会:
head -n10 data.txt | python3 script.py -
Read 10 lines. Continue?
Aborted!
我需要支持-
阅读后跟input()
- 我怎样才能让它工作?
为了节省我们的时间,你可以自由跳到底部看结论
我正在像你一样寻找问题的答案。
首先,我认为以下将解决问题......
没有 EOF 的多个管道输入
但是,它在我的计算机上没有成功,因此,我试图弄清楚如何准确清除 EOF 标记......
终止/中断/中止 Python 控制台/sys.stdin readline()
如何终止/中断/中止 Python 控制台/sys.stdin readline()?
冲洗
在 C 语言中,我们使用 fflush(stdin), ..etc 来清除缓冲区
在 C++ 语言中,我们使用 std::cin.get(), ..etc 来清除缓冲区
但是 Python 语言怎么样?
搜索2小时后,我意识到Python到目前为止不提供这个function,清除标准输入中的缓冲区/EOF
并且在线提供的答案像这样成功如何从`stdin`读取文件后使用`input()`? 仅适用于 Linux 系统
看完这篇
https://www.twblogs.net/a/5c0ac824bd9eee6fb21399d4
*我很确定(我认为)Windows 中的 Python 在文件采用标准输入后无法使用输入
但是,这是否意味着我们应该使用 sys.stdin 方法?
不,显然,否则我不会花时间在这里打字......
重新创建您自己的输入如下
def new_input(): ## version 1
import msvcrt
str_=''
c=msvcrt.getche()
while ord(c)!=3 and ord(c)!=4 and ord(c)!=26 and ord(c)!=13:
# print(ord(c))
str_ = str_+str(c)[2:-1]
c=msvcrt.getche()
return str_
def new_input(interact_string_): ## version 2
import msvcrt
print(interact_string_, end ="")
str_=''
c=msvcrt.getche()
while ord(c)!=3 and ord(c)!=4 and ord(c)!=26 and ord(c)!=13:
# print(ord(c))
str_ = str_+str(c)[2:-1]
c=msvcrt.getche()
return str_
def new_input(interact_string_): ## version 3
import msvcrt
import os
print(interact_string_, end ="")
str_=''
print('')
c=msvcrt.getche()
while ord(c)!=3 and ord(c)!=4 and ord(c)!=26 and ord(c)!=13:
os.system('cls')
print(interact_string_, end ="")
# print(ord(c))
if ord(c)==8:
str_ = str_[0:-1]
print(str_)
else:
str_ = str_+str(c)[2:-1]
print(str_)
c=msvcrt.getche()
# print(str_)
return str_
这里是数字的含义
并且使用if-structure进行反应仍然很方便,并返回最终字符串
在使用 stdin 到 readlines()/readline()/read() 读取文件后,您永远无法在Windows 系统中使用 stdin 输入/输出
同时,在同样的情况下, Linux 系统上的相同问题是可以解决的,答案将在那里......
在我看来并根据我的研究, Windows的最佳答案将是我的(当然我会这么说..) 。 ++==>重新创建您的输入()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.