在python中写入使用mono运行的REPL可执行文件?
我使用从终端运行的python脚本在mac via上运行 没有脚本,界面就是一个命令行。为了以编程方式与程序接口,我将在python中写入使用mono运行的REPL可执行文件?,python,mono,subprocess,stdin,popen,Python,Mono,Subprocess,Stdin,Popen,我使用从终端运行的python脚本在mac via上运行 没有脚本,界面就是一个命令行。为了以编程方式与程序接口,我将stdin、stdout和stderr设置为PIPE,然后尝试通信stdout.readline()工作正常,但在等待最后一次输入时会出现停顿,我可以通过线程学习如何使用最后一次输入。我不知道如何写入终端作为程序的输入。我使用了stdin.write()和communicate(),但没有任何效果。我认为这个问题可能是特定于项目的,幸运的是,它是开源的。不过,我不知道如何利用这一
stdin
、stdout
和stderr
设置为PIPE
,然后尝试通信stdout.readline()
工作正常,但在等待最后一次输入时会出现停顿,我可以通过线程学习如何使用最后一次输入。我不知道如何写入终端作为程序的输入。我使用了stdin.write()
和communicate()
,但没有任何效果。我认为这个问题可能是特定于项目的,幸运的是,它是开源的。不过,我不知道如何利用这一优势
proc = subprocess.Popen('mono MinecraftClient.exe ' + emailAddress + ' ' + passw + ' ' + ipAddress, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
while(True):
input = proc.stdout.readline()
print input
print proc.communicate(input + "\n")[0]
值得一提的是,communicate()将等待进程返回,因此在循环的第二次传递中,proc实际上将关闭,并且您保证会发生I/O错误,因此您确实需要stdin.write()。不过,一般来说,使用单线程循环处理双向内容是很棘手的,因为(正如一个示例)如果您的输入没有产生任何相应的输出,readline()将无限期地阻塞,您将永远无法进行更多的输入。除此之外,我不确定你想做什么,因为你似乎正在获取程序的输出并将其作为输入传递回去。@dahc我可以提供一些关于这方面的背景信息,因为我是他的朋友。他正试图让他的python程序从Minecraft读取聊天信息,如果符合条件,则处理该信息并返回响应。Tim,你可能会发现使用基于Python的客户端更容易,就像我在中找到的那样。这似乎是一个不错的项目。但是,他们试图在/usr/bin/中安装东西,而这在Mac中是不可编辑的。