如何从Python控制基于控制台的程序

我从未使用过Popen或Popen2库,但这是我的理解 他们可以捕获基于控制台的程序的输出. 是吗 还可以将击键发送到主机基础程序吗? 我想编程一个可以播放的Python程序 Windows上的Nethack 3.4.3的TTY版本,模拟人类 玩家:对于nethack来说,不可能知道是人类还是 计算机程序正在播放它. 这是一个基于控制台的程序,它 接受击键和输出(Windows)控制台上的字符 盒子. 我确实看到Wconio可以从屏幕上读取字符, 也许我可以使用它,必须对其进行尝试. 但是如何 发送击键? 任何帮助和想法都非常感谢. 和 新年快乐!

# 回答1

|因此,Spake将在2004年1月3日Sat的现在历史日期 02:24:32 -0800 | 您在Microsoft Box上的事实使基于控制台的问题 程序比 *NIX系统上的粘性要高得多. 您可能已经知道了,但是如果您不这样做,这里有些 技术信息使您面向您. Unix很早就围绕着管道的想法而设计. 几乎每个 程序从stdin读取并写信到Stdout. 因此,有一个常数 数据流入程序并恒定流出. 在 *nix系统上 终端将您的击键推到stdin,并将结果解释 从Stdout获得. (此描述过于简单,但会做到.) 结果包含某些代码,这些代码取决于终端,移动 光标周围,更改颜色等. 所有这一切的好资源 IS:http://www.faqs.org/docs/artu/index.html 即使您对Unix的东西不太感兴趣,也是一个很好的阅读,因为 Python继承了许多Unix哲学. MS-DOS,因此Microsoft Console程序,是基于一个完全基于的 不同的哲学,即CP/m. 而Unix是为大型设计的 有许多用户一次运行许多程序的计算机,CP/M是设计的 对于一个用户仅运行一个程序的计算机. CP/M简单 通过使用中断,抽象了低级硬件调用. 中断被称为中断,因为它们确实如此:他们 中断整个计算机,运行一些低级代码,然后返回 控制(一个又是一个)程序运行. 我不认为管道是 CP/M的一部分,但在某些时候它们被嫁接到MS-DOS上. (这个 可能是为了使一些脾气暴躁的Unix向导抱怨不那么声音 必须为单用户机器编写代码.)几乎没有任何用处是 在MS-DOS中使用管道完成. 当您在Windows中运行控制台程序时, 这是一个假装是旧DOS系统的特殊程序. apropos 文档:http://www.wkonline.com/d/cpm.html http://www.wkonline.com/d/ms-dos.html 您可能正在运行的Nethack通过 这些肮脏的旧DOS中断. 虽然可以"偷"这些 中断(并抓住他们的数据)我 不知道有任何图书馆 让你这样做,除非你有一些严肃的巫术,否则我不会尝试 在你里面. 为了让您了解它的复杂程度,在这里的某个地方 我有所有这些中断的手册,我认为它大约是6英寸 厚并涉及直接操纵处理器寄存器. 你可以 可能会找到一些C代码来做到这一点,但是嗯...我不知道. 我总是只是 当我与MS-DOS合作时,嵌入式组件. (;拜托,上帝现在没有依据! Mov Ah,4ch mov al,01h Int 21H;*哭泣*十五年后,我仍然记得这一点. )http://users.win.be/w0005997/gi/dosref.html 如果您 *真的 *想尝试制作扮演Nethack的机器人,我建议 安装Cygwin,为您提供一个Unix环境 Windows系统,然后为其编译Nethack, *然后 *您将拥有 访问适当的管道. 此外,您将在 *Nix Land中涉足. 您可能会喜欢它. http://www.cygwin.com/ 山姆·沃尔特斯 P.S. 您可以尝试将其输入Python Tutor列表. 你会 可能会得到更多这样的问题的答案. - - 永远不要忘记万圣节文件. http://www.opensource.org/halloween/ """微软今天将在哪里拖动您? 你真的想去那里吗?"""

标签: python

添加新评论