Python子进程和用户交互

2023-12-05

我正在 Python 2.6 中开发 GUI 前端,通常它相当简单:你使用subprocess.call() or subprocess.Popen()发出命令并等待其完成或对错误做出反应。如果您的程序停止并等待用户交互,您会怎么做?例如,程序可能会停止并询问用户 ID 和密码,或者如何处理错误?

c:\> parrot
Military Macaw - OK
Sun Conure - OK
African Grey - OK
Norwegian Blue - Customer complaint!
(r) he's Resting, (h) [Hit cage] he moved, (p) he's Pining for the fjords

到目前为止,我读过的所有内容都告诉您如何仅读取程序的所有输出after完了,不是程序还在运行时如何处理输出。我无法安装新模块(这是针对 LiveCD 的),并且我将多次处理用户输入。


查看子流程手动的。您可以选择subprocess能够重定向stdin, stdout, and stderr您调用自己的流程的信息。

from subprocess import Popen, PIPE, STDOUT

p = Popen(['grep', 'f'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)

grep_stdout = p.communicate(input='one\ntwo\nthree\nfour\nfive\nsix\n')[0]
print grep_stdout

您还可以逐行与流程交互。鉴于此prog.py:

import sys
print 'what is your name?'
sys.stdout.flush()
name = raw_input()
print 'your name is ' + name
sys.stdout.flush()

您可以通过以下方式与其逐行交互:

>>> from subprocess import Popen, PIPE, STDOUT
>>> p = Popen(['python', 'prog.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
>>> p.stdout.readline().rstrip()
'what is your name'
>>> p.communicate('mike')[0].rstrip()
'your name is mike'

编辑:在python3中,它需要是'mike'.encode().

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

Python子进程和用户交互 的相关文章

随机推荐

  • Python:在字符串中查找子字符串并返回子字符串的索引

    I have 一个函数 def find str s char 和一个字符串 Happy Birthday 我本质上想输入 py 并返回3但我不断得到2返回 Code def find str s char index 0 if char
  • linux下Mono共享库位置

    我有一个用 C 编写的共享库 我想在 Linux 下与 Mono 一起使用 我遵循这个指南http www mono project com Interop with Native Libraries 我让它工作 但我必须将我的库文件放入
  • 来自不同脚本的多个角度元素

    是否可以使用角元素从不同的脚本生成 我有 2 个项目天气小部件和时钟小部件 它们生成自己的脚本 连接所有必需的脚本 当我单独使用这些小部件时 它工作正常 但是当它们在同一页面上使用时 会出现如下错误 DOMException Failed
  • rxJS observable 未到达订阅

    我使用 Angular 2 和 RxJS 但我很难设置一个简单的可观察系统 据我了解 do 运算符用于产生副作用 并且您可以在 subscribe 函数中放置代码来处理 observable 返回的结果 所以我的组件要求服务初始化系统 该服
  • 如何发送验证电子邮件而不进入垃圾邮件文件夹?

    我有一个 PHP 网站 在创建新帐户时会发送验证码 我的问题是 几个月以来 很多电子邮件都进入了垃圾邮件文件夹 我想到了一个解决方案 那就是使用 外部服务 来发送我的电子邮件 而不是简单地通过 PHP 中的邮件函数发送它 问题 1 我应该使
  • Android 主题首选项对话框

    我有一个使用首选项活动来设置某些用户设置的应用程序 我一整天都在试图解决这个问题 当用户按下 编辑文本首选项 对象时 我尝试为警报对话框设置主题 将打开一个对话框 用户可以设置共享首选项 弹出对话框 我想要绿色的文字 我想要绿色的分隔线 线
  • 使用 Guice 注入通用实现

    我希望能够使用 Guice 注入通用接口的通用实现 public interface Repository
  • 如何通过 HttpsURLConnection 将发布数据发送到 https 服务器 [重复]

    这个问题在这里已经有答案了 我看到一个表格 https aptransport in CFSTONLINE Reports VehicleRegistrationSearch aspx 在网络中 如果我给出选择搜索元素 作为注册号并输入搜索
  • 使用 XSLT 模板从一个 JAXB 对象转换为另一个 JAXB 对象

    有没有办法使用 XSLT 模板文件将 JAXB 生成的对象转换为另一个 JAXB 对象 这两个对象由两个不同的 JAXB 绑定生成 我知道我可以将对象编组为字符串 然后使用 XSLT 处理器将其转换为其他格式 之后将其解组到另一个 JAXB
  • Bazel 如何构建一个链接预构建外部库的简单应用程序

    Using Bazel2 2 我如何针对外部库进行构建 例如在我的情况下 我想针对 boost 进行构建 为 MS VC 2019 预构建 问题是这在 Bazel 中可能吗 鉴于 boost 库的本地路径是 c boost 1 72 0 其
  • 在 Delphi 7 中处理 CMYK jpeg 文件

    我正在尝试访问存储为 Jpeg 文件的文件 是否有一种简单的方法可以在不损失性能的情况下显示这些图像文件 您可以使用 TJPEGImage 实例加载 JPeg 文件 然后将其分配给 TBitmap 进行显示 您可以在单位 jpeg 中找到
  • 致命:远程错误:找不到存储库 octocat/myapp

    我是第一次使用 Git 刚刚分叉了一个开源项目 如下GitHub 的说明 我可以在本地计算机上克隆我的分叉 但在运行这些命令时出现错误 git remote add upstream git github com octocat myapp
  • 区分数据库中的最新数据

    我正在将数据存储在我的数据库中 存储的数据如下所示 id upload month created at 1 January 2017 01 30 13 22 39 2 Febuary 2017 01 30 13 23 42 3 Janua
  • 在 REPL 中使用对象时任务不可序列化

    因此 另一个问题促使我尝试以下操作 object Foo def f 1 sc parallelize List 1 map x gt val myF Foo f x myF 哪个有效 但以下无效 object Foo def f 1 de
  • ASP.Net MVC 路由捕获所有 *.aspx 请求

    This must之前曾被问过 但读完后here here here and here我无法推断相关部分以使其发挥作用 我正在将旧的 Web 表单站点改造成 MVC 并且想要捕获特定的传入 HTTP 请求 以便我可以发出RedirectPe
  • 按内部元素的数量对二维数组进行排序

    如何按二维数组内部元素的长度对其进行排序 内部元素的数量不相同 Example a 1 2 3 4 5 6 7 8 9 排序后 数组变为 gt 4 5 6 7 2 3 8 9 1 该解决方案有效 a 1 2 3 4 5 6 7 8 9 a
  • 表和存储过程的批量重命名

    我需要重命名所有表 存储过程 显然还有每个存储过程中引用旧表名称的代码 为什么这是最好的方法 我考虑过的一些方法 SP Rename 完成了一半的工作 然而 这不会改变 SP 本身内的代码 除了RedGates的Refactor之外 我在这
  • React Native:React 导航 StackNavigator 不起作用。收到错误:“未定义不是对象(评估'this.props.navigation.navigate')”

    我正在尝试使用 React Navigation 和 StackNavigator 在我的应用程序中导航 我有一个按钮onPress gt navigate DetailsScreen 我希望这能带我去DetailsScreen 但我收到以
  • iPhone 应用程序升级时强制重置 NSUserDefault

    每当用户更新我的应用程序时 我想强制重置为 NSUserDefault 为什么我需要这个 因为每次更新都包含一些关于用户的新信息 由于 NSUserDefault 中已经存在一些信息 令牌 我的应用程序不会调用我的网络服务 因此我没有新的用
  • Python子进程和用户交互

    我正在 Python 2 6 中开发 GUI 前端 通常它相当简单 你使用subprocess call or subprocess Popen 发出命令并等待其完成或对错误做出反应 如果您的程序停止并等待用户交互 您会怎么做 例如 程序可