我正在尝试致电 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 向用户呈现一个菜单:
不幸的是,当我尝试导航菜单时,我得到:
使用箭头键时使用 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 的路...我现在可以导航菜单,但它仍然留下粪便:
要在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(使用前将#替换为@)