首页 > 解决方案 > 使用 python 写入标准输入后出现异常

问题描述

我正在尝试编写一个 Python 脚本来执行 Java 文件并模拟用户输入。为此,我需要能够发送一些东西,阅读输出,然后当我再次被提示时再次写一些东西。

我发现这部分工作

def execute_java_in(path):

    print(f"java {os.path.abspath(path)}")
    p = Popen(['java', os.path.abspath(path)], stdout=PIPE, stderr=PIPE, stdin=PIPE, encoding="utf-8")

    output, error = p.communicate(input="5789")

    print(output)
    print(error)

    output, error = p.communicate(input="5239")

    print(output)
    print(error)

第一个输入提示正确的响应,但随后java.util.NoSuchElementException引发了 an 。我猜通信是在我的输入之后向标准输入写入一些东西,这是应该读取下一个输入时的第一个字母。我也尝试过stdin.write()stdout.read()但随后stdout.read()阻止了所有进一步的命令。有没有人知道还有什么可以尝试的?

标签: pythonpython-3.xsubprocesspopen

解决方案


这取决于 Java 程序的功能。

您可以为调用添加timeout参数。communicate

您也可以立即提供两个输入:

output, error = p.communicate(input="5789\n5239\n")

如果它仍然引发NoSuchElementExceptions,我们无法在没有 Java 代码的情况下为您提供帮助。


推荐阅读