使用 Python subprocess.call() 启动 ncurses 进程

2023-12-12

我正在尝试致电 ct-ng (http://crosstool-ng.org/)来自 SCons SConstruct 脚本,所以基本上来自 Python。

使用以下方法:

 ret =  subprocess.call(["/mnt/build/pw_build/crosstool-ng/bin/ct-ng  menuconfig"], env=env_cross,shell=True)

crosstool-ng 使用 ncurses 向用户呈现一个菜单:

Enter image description here

不幸的是,当我尝试导航菜单时,我得到:

Enter image description here

使用箭头键时使用 cat 显示序列,我看到:

:/mnt/build$ cat > /dev/null
^[OA^[OD^[OB^[OC^[OA^[OB^[OD^[OC^[OA^[OB

似乎有什么东西可能从序列中剥离转义字符。

当我从终端中的命令行调用 ct-ng 脚本时,它可以正常工作,当我使用子进程.call()事情会变坏。

我的环境包括:

  • xfce4-终端 0.6.3
  • Linux 3.13.0-32-lowlatency #57-Ubuntu SMP PREEMPT 7 月 15 日星期二 04:08:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  • Python 2.7.6
  • NCURSES_VERSION“5.9”
  • GNU Make 3.81
  • crosstool-NG 版本 1.19.0

我看到的是一个已知问题吗?还有什么我应该做的吗?

更新: 谢谢埃里克...这让我 0.5f 的路...我现在可以导航菜单,但它仍然留下粪便:

Enter image description here


要在Python下运行curses程序,我建议你使用pexpect.

例如,这是一个简单的程序,它启动一个副本vim,添加一些文本,转义到命令模式,发出 :w 命令,然后与用户交互(允许他或她继续编辑或执行其他操作)。然后控制权返回到Python:

#!/usr/bin/env python
import pexpect
child = pexpect.spawn("/usr/bin/vim")
child.send('a\n\nThis is another test.')
child.send('\x1b')
child.send(':w! test.txt\n')
child.interact()

您还可以将参数(例如转义字符以及输入和输出的过滤函数)传递给交互方法。但这些会变得有点棘手。 (另一方面,它们随后成为您的自定义键盘宏系统,插入在用户和在该应用程序下运行的应用程序之间.spawn()).

(顺便说一句:您可以将所需的击键序列发送到此ct-ng对话框/菜单...只需弄清楚终端设置所需的这些序列即可。例如,在 MacOS X 下以 TERM=xterm-256color 运行的 iTerm 上,“向下箭头”光标移动显示为 ^[[B ([Esc][Bracket][B])。这将是 '\x1b[B' 作为 Python 字符串文字)。

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

使用 Python subprocess.call() 启动 ncurses 进程 的相关文章

随机推荐

  • 为什么 hashcode() 返回一个整数而不是 long? [复制]

    这个问题在这里已经有答案了 在java中 hashcode 方法返回整数而不是长整型 有什么具体原因吗 嗯 一个很好的理由是hashCode基于数据结构 HashSet HashMap 使用数组来存储 bin 数组仅限于int指数 你将一无
  • 当活动重新启动时,活动的片段如何恢复?

    我正在测试系统由于 RAM 不足而终止应用程序进程后用户进入我的应用程序的情况 我看到意想不到的行为并希望得到一些帮助 在我的应用程序中 我有一个活动 我们称之为ActivityA 立即创建一个片段 Fragment A 并进行片段替换 F
  • android WebView停止Flash插件onPause

    我有一个 WebView 其中包含一个 html 文件 其中包含一个 Flash 插件 一个视频 当用户按下 Flash 插件上的播放按钮时 视频可以正常播放 然而 当用户关闭应用程序或移动到新的 Activity 时 Flash 仍在后台
  • 调度周期性任务和时钟漂移

    我想安排一个每隔 X 小时执行一次的定期任务 我有一个用 Java 编写的服务 我正在考虑创建一个长时间运行的后台线程 只要服务启动 它就永远运行 我如何确保我们每 X 小时执行一次任务 我的主机上的时钟漂移是我应该担心的问题吗 我知道如果
  • 在同一端口上运行多个 Tomcat 实例

    我需要在同一端口上的不同目录名下运行多个 tomcat6 实例 我将为两个不同的项目安装两次tomcat6 但是如何将两个实例配置为在同一端口上运行 您可以使用 apache Web 服务器来实现这一点 该服务器使用 mod jk 或 mo
  • xsl:fo 检索标记不是有效的子项

    我需要进行 xsl fo 转换
  • 如何将每个句子的第一个字母大写?

    我知道如何将每个单词的第一个字母大写 但我想知道如何在 C 中将每个句子的第一个字母大写 这不一定是一个小问题 句子可以以许多不同的标点符号结尾 而这些相同的标点符号并不总是表示句子的结尾 像 Dr 这样的缩写可能会带来特殊问题 因为可能有
  • C++ 模板 std::tuple 到 void* 并返回

    我正在尝试使用 C 11 和可变参数模板创建资源管理器 问题是如何将 std tuple 存储到集合中并将其取回 在此示例中 我尝试将其存储到 void 此处尝试不使用 boost any 每次我转换回 std tuple 时 我都会发现转
  • 使用列计数时避免将元素拆分为两列

    我正在尝试使用多列创建一组 但它将一个 Link4 分成两列 只需将鼠标悬停在 Link4 上即可 它的一些部分被分成第二列 有没有什么可能的方法来避免这种情况 div Nav height 100 important div Nav a
  • PROLOG 中的递归?

    鉴于以下 Prolog 事实 f a b f b c f c d f d e f e 我需要创建一个查询xyz a Y 这样我得到Y e d c b 因为 a 依赖于 b b 又依赖于 c 等等 我当前的查询是 xyz X Y f X P
  • 如何在 Java 对象列表中搜索

    我有一个对象列表 并且该列表非常大 对象是 class Sample String value1 String value2 String value3 String value4 String value5 现在我必须在列表中搜索对象的特
  • 动画(可能切换类)不起作用

    因此 我正在制作一个网站 其中有几个 div 当用户单击特定按钮或导航项时 这些 div 应该从右侧 左侧或顶部滑动 然而 这些都不起作用 当我单击应该使它们滑动的按钮时 所有 div 都不会滑动 我使用纯 JavaScript 来执行这些
  • BULK INSERT SQL SERVER 的乐趣 - 指定代码页的类型不匹配或无效字符

    我正在插入如下所示的数据 AA00000111 PSNH OT J SMITH 03 01 2011 10 11 1957 42 Male Hartford NH Lorazepam Benzodiazepines C AA00000151
  • JAR 文件中带有图像的 Java 工具提示

    我正在使用 JFreeChart 通过实现来自定义图表的工具提示XYToolTipGenerator界面 作为generateToolTip 方法应该返回一个字符串 这是我在工具提示中显示图像所做的操作 Override public St
  • 如何查看我正在使用哪个版本的 Swift?

    我刚刚在 Xcode 中创建了一个新的 Swift 项目 我想知道它使用的是哪个版本的 Swift 如何在 Xcode 或终端中查看我的项目中使用的 Swift 版本 我所做的是在终端中说 xcrun swift version Xcode
  • 如何使用Oracle全局临时表?

    我正在尝试使用 Oracle 全局临时表 而不在数据库中物理创建表 以下代码不起作用 有人可以解释一下使用全局临时表的正确方法吗 declare global temporary table my temp table column1 nu
  • 从时间跨度(例如“15 分钟”或“2 秒”)到“00:15:00”或“00:00:02”

    我正在搜索 R 函数的帮助 该函数可以将时间跨度 例如 15 分钟 或 1 小时 或 6 秒 或 1 天 转换为日期时间对象 如 00 15 00 或 01 00 00 或 00 00 06 或 1960 01 02 00 00 00 不确
  • 如何使用Java向mysql插入数据

    我正在尝试使用 Java 将数据插入 mysql 数据库 我正在使用以下代码从数据库中获取数据 并且工作正常 import java sql Connection import java sql DriverManager import j
  • 将双精度型格式化为小数点后两位

    我一直试图将打印出来的答案保留到小数点后两位 所有涉及的数学都必须保持两位小数的格式 我已经尝试了一些事情 但我不确定要改变什么才能使这项工作正常进行 double pdt1 239 99 double pdt1Total double p
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build