当前位置: 首页 > 知识库问答 >
问题:

输入()后readline()从sys.stdin?

谯德元
2023-03-14

我的脚本在sys上调用readlines()。stdin,然后调用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()

如果用户在命令行上指定了一个实际的文件参数,则脚本可以正常工作,但如果用户通过管道输入数据并使用-

head -n10 data.txt | python3 script.py -  
Read 10 lines. Continue?
Aborted!

我需要支持-读取,然后是输入()-我如何使它工作?

共有1个答案

司寇苗宣
2023-03-14

为了节省我们的时间,你可以跳到底部看结论

我和你一样在寻找这个问题的答案。

首先,我认为以下几点可以解决这个问题。。。

无需EOF的多管道输入

如何使用输入()后,从stdin读取文件?

然而,它在我的计算机中不成功,因此,我试图弄清楚如何准确地清除EOF标记...

终止/中断/中止Python控制台/sys。stdinreadline()

如何终止/中断/中止Python控制台/sys.stdinreadline()?

脸红

如何刷新Python中的输入流?

在C语言中,我们使用fflush(stdin)。。等来清除缓冲区

在C语言中,我们使用std::cin。get()。。等来清除缓冲区

但是Python语言呢??

搜索了2个小时后,我意识到Python到目前为止还没有提供此功能,请清除stdin中的buffer/EOF

在网上可以找到像这样成功的答案。如何使用“输入()”在从“标准普尔”读取文件后?只适用于Linux系统

看完这个

https://www.twblogs.net/a/5c0ac824bd9eee6fb21399d4

*我很确定(我认为)在Windows中的Python不能使用输入后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()
html" target="_blank">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_

这是数字的含义

  • od(c)==3将是Ctrl C的关键
  • od(c)==4将是Ctrl D的键
  • od(c)==26将是Ctrl Z的键
  • od(c)==13将是回车键
  • od(c)==22将是Ctrl C的关键
  • od(c)==8将是Backspace的关键字

它仍然可以方便地使用if结构来响应,并返回最终的字符串

>

  • 使用stdin读取行()/readline()/read()读取文件后,在Windows系统中无法使用stdin输入/输出文件

    然而,在同样的情况下,Linux系统上同样的问题是可以解决的,答案就在那里。。。

    在我看来,根据我的研究,Windows的最佳答案将是我的(当然我会这么说...)。==

  •  类似资料:
    • 本文向大家介绍Node.js用readline模块实现输入输出,包括了Node.js用readline模块实现输入输出的使用技巧和注意事项,需要的朋友参考一下 什么是Readline Readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流。使用require("readline")可以引用模块。 如何使用Readline 以使用为角度的话,学习

    • 配置 # readline_parse_and_bind.py try: import gnureadline as readline except ImportError: import readline readline.parse_and_bind('tab: complete') readline.parse_and_bind('set editing-mode vi')

    • 我转向你,在这件事上我一直把头撞在墙上。 我正在做一个小的socket编程,我可以看到当我把它放出来。println(“…”)while循环之前的代码行(in.readLine())它工作正常,但我需要它位于循环内部。 说清楚一点,我没有看到任何错误。我只是看不到此应用程序的客户端显示文本。它看起来好像在工作,但事实并非如此。此外,我也不控制该应用程序的客户端,它由通过TCP连接到此套接字侦听器应

    • 描述 (Description) 此函数从EXPR引用的文件句柄中读取一行,返回结果。 如果要直接使用FILEHANDLE,则必须将其作为typeglob传递。 简单的readline函数等效于<>。 语法 (Syntax) 以下是此函数的简单语法 - readline EXPR 返回值 (Return Value) 此函数在标量上下文中仅返回一行,在列表上下文中,返回到文件结尾的行的列表 例子

    • GNU Readline 库提供了一组供应用程序使用的功能,这些功能允许用户在键入命令时编辑命令行。Emacs 和 vi 编辑模式均可用。Readline 库包含其他功能,这些功能可以维护以前输入的命令行的列表,以重新调用并可能重新编辑这些命令行,并对先前的命令执行类似 csh 的历史记录扩展。 历史记录设施也作为构建过程的一部分放置在一个单独的库中,即历史记录库。在需要 Readline 功能的

    • 问题内容: 我正在编写一个连接到servlet的程序,这要感谢a,但是我在检查url时卡住了 我得到了错误: java.net.ProtocolException:读取输入后无法写入输出。 如果我用注释中的代码检查网址,但不幸的是它可以正常工作,我需要检查网址,所以我认为问题出在方法上,但我不知道如何解决 非常感谢你 问题答案: HTTP协议基于请求-响应模式:首先发送请求,然后服务器响应。服务器