Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中写入使用mono运行的REPL可执行文件?_Python_Mono_Subprocess_Stdin_Popen - Fatal编程技术网

在python中写入使用mono运行的REPL可执行文件?

在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(),但没有任何效果。我认为这个问题可能是特定于项目的,幸运的是,它是开源的。不过,我不知道如何利用这一

我使用从终端运行的python脚本在mac via上运行

没有脚本,界面就是一个命令行。为了以编程方式与程序接口,我将
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中是不可编辑的。