通过管道输入到脚本,然后从用户获取输入

2024-01-30

假设我想将输入通过管道传输到 Python 程序,然后在命令行上从用户那里获取输入。

echo http://example.com/image.jpg | python solve_captcha.py

和内容solve_captcha.py are:

import sys 
image_url = sys.stdin.readline()

# Download and open the captcha...

captcha = raw_input("Solve this captcha:")
# do some processing...

以上将触发EOFError: EOF when reading a line error.

我也尝试添加sys.stdin.close()行,这提示了ValueError: I/O operation on closed file.

你能通过管道将信息传递给stdin然后再从用户那里获取输入?

Note:这是一个精简的、简化的示例 - 请不要回答说“为什么你想在第一种情况下这样做”,这真的很令人沮丧。我只是想知道你是否可以将信息传递给stdin然后提示用户输入。


这个问题没有通用的解决方案。最好的资源似乎是这个邮件列表主题 http://mail.python.org/pipermail/python-list/2000-March/048890.html.

基本上,通过管道连接到程序中stdin到该管道,而不是到终端。

邮件列表线程有几个相对简单的解决方案 http://mail.python.org/pipermail/python-list/2000-March/020133.html对于*nix:

打开 /dev/tty 替换 sys.stdin:

sys.stdin = open('/dev/tty')
a = raw_input('Prompt: ')

运行脚本时将 stdin 重定向到另一个文件句柄,并从中读取:

sys.stdin = os.fdopen(3)
a = raw_input('Prompt: ')
$ (echo -n test | ./x.py) 3<&0

以及建议使用curses http://mail.python.org/pipermail/python-list/2000-March/055320.html。请注意,邮件列表线程是ancient因此您可能需要修改您选择的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过管道输入到脚本,然后从用户获取输入 的相关文章

随机推荐

  • Microsoft 桌面搜索 - 包含在 Windows Server 2008 上不返回结果

    我正在尝试搜索远程文件共享 运行 Windows Server 2008 R2 对于包含一些文本的文件 如果我尝试这样做 效果很好 SELECT System FileName FROM RemoteServer SystemIndex W
  • 在 TensorFlow 中,有什么方法可以初始化未初始化的变量吗?

    TensorFlow 中初始化变量的标准方法是 init tf initialize all variables sess tf Session sess run init 经过一段时间的学习后 我创建了一组新的变量 但是一旦初始化它们 它
  • window.opener 不对

    我正在打开一个弹出窗口 并希望在其中执行单击操作 从而在打开它的页面中执行一些 jQuery 我在网上找到的所有内容都表明我应该能够使用 window opener 做到这一点 例如JQuery 写入开启器窗口 https stackove
  • jQueryeach() 闭包 - 如何访问外部变量

    从 each 中访问 this rules 变量的最佳方法是什么 任何关于原因 方式的解释也会有帮助 app Style function node this style node this rules var ruleHolder nod
  • 为什么perl配置VC-WIN64A后没有ms\do_ms.bat?

    我正在使用 Visual Studio 2015 编译 OpenSSL 我已经安装了 Windows 10 上的 Visual Studio 2015 ActivePerl 5 24 0 2400 MSWin32 x64 300558 na
  • 如何在不使用非 api 类的情况下取消 Java 中的 Files.copy() ?

    我正在下载一个文件Files copy method Files copy in Paths get targetZipFile StandardCopyOption REPLACE EXISTING 如果下载很慢我想取消它 我在 stac
  • gcov 在当前目录中创建 .gcov 文件。有什么办法可以改变这个吗?

    我在 RHEL 上运行 gcov gcc 4 1 2 当我想为 gcov 文件指定目录时 关于如何做到这一点有什么想法吗 从您想要创建其文件的目录运行 gcov 你必须使用 o参数告诉它在哪里查找 gcno gcda 文件 看gcov 的文
  • 是什么让 SPI 比 I2C 协议更快 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我了解 I2C 和 SPI 通信的基础知识 因为两者都是同步协议 我想知道是什么让 SPI 比 I2C 更快 如果我没记错的话 使用 I2
  • Docker:理解ENTRYPOINT和CMD指令

    我想问一些关于ENTRYPOINT and CMD可在 Dockerfile 中使用的说明 Providing that I m mounting local directories as volumes in a container us
  • 如何检查我当前是否在主屏幕上

    是否可以检查我的应用程序当前是否处于后台并且主屏幕是否已启动 没有 API 可以知道主屏幕是否正在显示 但是 您可以使用各种 Activity 生命周期回调 onStop 等 知道您的应用程序何时发送到后台
  • 为什么未装箱的数组不是可折叠的实例?

    在 Haskell 中找出要使用的正确数据容器可能有点棘手 对于我认为使用的 2D 网格应用程序UArray会是合适的 然而 据我所知UArray不是一个实例foldable 不在Data Array IArray nor Data Arr
  • Flutter SQFlite 一对多关系设置

    我正在创建一个应用程序并需要一个数据库 该数据库包含位置表和兴趣点表 这是一对多的关系 一个位置有多个兴趣点 现在我尝试用 sqflite 在 flutter 中建立这种关系 但失败了 我已经尝试添加外键 但没有成功 这只是代码中最重要的部
  • RecyclerView ViewHolder 内部 ConstraintLayout 的性能

    在过去的两天里 我一直在尝试分类为什么我的 RecyclerView 在滚动时速度如此之慢 并且我已将其范围缩小到我用于行的 ConstraintLayout 在 Android 上使用 GPU 分析器会显示绿色 蓝绿色条一直到屏幕顶部 表
  • 使用 XmlSlurper 解析(非常)大的 XML 文件

    我对 Groovy 有点陌生 我正在尝试使用 XmlSlurper 读取一个 相当 大的 XML 文件 超过 1Gb 由于它不构建整个 DOM 因此它应该能够在处理大文件时产生奇迹 在记忆中 尽管如此 我还是不断收到 OutOfMemory
  • 在 PL/pgSQL 函数中拆分逗号分隔的字符串

    我正在尝试编写一个函数 该函数将 ID 作为输入并更新该给定 ID 上的一些字段 到目前为止 它看起来像这样 CREATE FUNCTION update status p id character varying p status cha
  • 如何在 Laravel 中解密哈希密码

    我用谷歌搜索了很多 但不幸的是没有找到有效的解决方案 我知道这是一种糟糕的技术 但我需要通过电子邮件向用户发送密码 我已设法发送用户哈希密码 但我无法解密该密码 以下是我正在使用的程序 results DB select select fr
  • 将 postgreSQL 存储过程作为一个事务执行

    我正在使用 PostgreSQL 9 3 并且创建了一些包含多个语句的存储过程 我在准备好的语句的帮助下在 Java 应用程序中调用此存储过程 现在我读到存储过程中的每个语句都作为一个事务执行 即每个语句后一次提交 但我想要的是将整个存储过
  • nginx WordPress URL 重写

    我刚刚安装了 nginx 1 0 8 和 php fpm 在过去 30 分钟里我试图重写 WordPress 的 URL WordPress URL 应如下所示 http localhost website blog 2011 10 sam
  • 在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?

    在 OSX 上 Valgrind 报告此内存泄漏 它来自哪里 该代码是用 g 作为 c 代码编译的 我这样做是为了函数重载 13088 18 bytes in 1 blocks are definitely lost in loss rec
  • 通过管道输入到脚本,然后从用户获取输入

    假设我想将输入通过管道传输到 Python 程序 然后在命令行上从用户那里获取输入 echo http example com image jpg python solve captcha py 和内容solve captcha py ar