【问题标题】:CLI Front End with Python: How to pass string to a running process?使用 Python 的 CLI 前端:如何将字符串传递给正在运行的进程?
【发布时间】:2012-06-20 02:01:45
【问题描述】:

如何将字符串/数据发送到python中正在运行的进程的STDIN?

我想为 CLI 程序创建一个前端。例如。我想将多个字符串传递给这个 Pascal 应用程序:

program spam;
var a,b,c:string;
begin
while e <> "no" do
begin
    writeln('what is your name?');
    readln(a);
    writeln('what is your quest?');
    readln(b);
    writeln('what is your favorite color?');
    readln(c);
    print(a,b,c);
end;
end.

我如何将字符串从 python 传递给这个程序(使用 python 中的子进程模块)。谢谢。对不起我的英语。

【问题讨论】:

  • 如果您想控制另一个交互式程序,不妨试试Pexpect module
  • 谢谢你布莱尔!我多年来一直在寻找这个解决方案! :)
  • @gnibbler - 现在已经这样做了。
  • 顺便问一下,expect 还有其他跨平台替代方案吗?
  • 已经用一个可能的选项更新了我的答案 - 未经测试,因为我这里没有 Windows。

标签: python process fork subprocess stdin


【解决方案1】:

如果您想控制另一个交互式程序,不妨试试Pexpect module。它旨在寻找提示信息等,并与程序进行交互。请注意,它目前不能直接在 Windows 上运行 - 它可以在 Cygwin 下运行。

一个可能的非 Cygwin Windows 变体是WinPexpect,我是通过this question 找到的。该问题的一个答案表明最新版本的 WinPexpect 位于 http://sage.math.washington.edu/home/goreckc/sage/wexpect/,但查看修改日期,我认为 BitBucket(第一个链接)实际上是最新版本。

由于 Windows 终端与 Unix 终端有些不同,我认为没有直接的跨平台解决方案。但是,WinPexpect 文档说它和 pexpect 在 API 上的唯一区别是 spawn 函数的名称。您可能可以执行以下(未经测试的)代码以使其在两者中都能正常工作:

try:
    import pexpect
    spawn = pexpect.spawn
except ImportError:
    import winpexpect
    spawn = winpexpect.winspawn

# NB. Errors may occur when you run spawn rather than (or as
# well as) when you import it, so you may have to wrap this 
# up in a try...except block and handle them appropriately.
child = spawn('command and args')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多