使用Python的CLI前端:如何将字符串传递给正在运行的进程?

2024-10-02 22:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在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中的subprocess模块)。谢谢你。对不起我的英语。在


Tags: 数据字符串程序yourcli进程isstdin
1条回答
网友
1楼 · 发布于 2024-10-02 22:35:56

如果您想控制另一个交互式程序,可以尝试使用Pexpect module来完成此操作。它被设计用来寻找提示信息等,并与程序交互。请注意,它目前不能直接在Windows上工作-它可以在Cygwin下工作。在

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

由于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')

相关问题 更多 >