gpt4 book ai didi

Python - 在 Windows 上运行一个带有提示 I/O 和 "proxy"的简单命令行程序

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:58 24 4
gpt4 key购买 nike

我有一个简单的命令行二进制程序hello,它输出到STDOUT:

What is your name?

并等待用户输入。收到他们的输入后输出:

Hello, [name]!

并终止。

我想使用 Python 对该程序的最终输出运行计算(“Hello,[name]!”),但是在最终输出之前,我希望 Python 脚本本质上“是“二进制程序。换句话说,我希望 Python 将所有提示转发到 STDOUT,然后接受用户的输入并将其提供给程序。但是我想隐藏最终输出,以便我可以处理它并向用户显示我自己的结果。我不想在脚本中复制 hello 的行为,因为这个简单的程序是我实际使用的更复杂程序的替代品。

我希望在 subprocess 中有某种机制,我可以做类似的事情:

while process.is_running():
next_char = process.stdout.read(1)
if next_char == input_prompt_thing: # somehow check if the program is waiting for input
user_input = raw_input(buffer)
process.stdin.write(user_input)
else:
buffer += next_char

我一直在使用 subprocess 并基本上意识到我可以使用 process.stdout.read(1) 在程序开始阻塞之前从程序中读取数据,但我不知道如何在进程阻止我的 Python 脚本之前打破这个循环。我对控制台 I/O 不太熟悉,这对我来说不是一个专业领域,所以我开始感到非常迷失。我感谢任何帮助!

最佳答案

你可以尝试winpexpect (未测试):

import re
from winpexpect import winspawn

p = winspawn('hello')
prompt = "What is your name?"
p.expect(re.escape(prompt))
name = raw_input(prompt)
p.sendline(name)
p.expect("Hello, .*!")
output = p.after
# ...

关于Python - 在 Windows 上运行一个带有提示 I/O 和 "proxy"的简单命令行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8470559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com