(抱歉,如果这有点含糊,因为我刚刚开始使用 Python。)
我正在创建一个 SublimeText 2 intellisense 插件,该插件与从 Node.js 脚本生成的正在运行的命令行节点服务器进行通信。我想与之通信的节点应用程序可以在这里找到: https ://github.com/clausreinke/typescript-tools 。(请注意,一旦调用 tss 命令,它就会启动它自己的子进程命令行 repl,它需要接收要执行的命令。将命令发送到该命令行本身就是一个完全不同的问题,我还没有解决。 )
我可以通过以下方式成功与节点“交谈”:
self.process = subprocess.Popen( self.args,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT)
self.result = self.process.communicate()[0]
使用
self.thread = NodeJS( args )
self.thread.start()
self.handle_thread( self.thread )
问题是,一旦 node.js 文件被执行,它就会关闭管道并退出 IO 进程。对该进程的后续调用返回一个
ValueError: I/O operation on closed file
我的问题是:如何启动节点应用程序,在后台运行它,然后从 Python 连续“管道”命令到它?
我想
- 插件加载时启动 node.js 服务器并使其在后台运行
- 监听我然后发送到节点的键输入(已经工作)
- 将正在运行的节点进程的输出(在查找定义之后)传回python,然后显示输出,但不要关闭线程或进程
除了连续的异步来回,所有步骤都完成了,我似乎无法弄清楚。
任何帮助,将不胜感激。