【发布时间】:2013-01-01 04:03:03
【问题描述】:
(抱歉,因为我刚刚开始使用 Python,所以有点含糊。)
我正在创建一个 SublimeText 2 intellisense 插件,该插件与从 Node.js 脚本生成的正在运行的命令行节点服务器进行通信。我想与之通信的节点应用程序可以在这里找到:https://github.com/clausreinke/typescript-tools。 (请注意,一旦调用了 tss 命令,它就会启动 它自己的 子进程命令行 repl,它需要接收要执行的命令。将命令发送到该命令行是完全不同的 /em> 问题本身,我还没有解决。)
我可以通过以下方式成功与节点“对话”:
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,然后显示输出,但不要关闭线程或进程
所有的步骤都完成了,除了不断的异步来回,我似乎无法弄清楚。
任何帮助将不胜感激。
【问题讨论】:
-
self.result = self.process.communicate()顺便关闭管道
标签: python node.js plugins io sublimetext2