def __init__(self, script_path):
"""
Starts a node client (if not already started) and communicate with it.
The script file to run is passed to the constructor.
"""
super(ServerClient, self).__init__(script_path)
# start node process
pref_settings = sublime.load_settings('Preferences.sublime-settings')
node_path = pref_settings.get('node_path')
if node_path:
print("Path of node executable is configured as: " + node_path)
configured_node_path = os.path.expandvars(node_path)
if NodeCommClient.is_executable(configured_node_path):
node_path = configured_node_path
else:
node_path = None
print("Configured node path is not a valid executable.")
if not node_path:
if os.name == "nt":
node_path = "node"
else:
node_path = NodeCommClient.which("node")
if not node_path:
path_list = os.environ["PATH"] + os.pathsep + "/usr/local/bin" + os.pathsep + "$NVM_BIN"
print("Unable to find executable file for node on path list: " + path_list)
print("To specify the node executable file name, use the 'node_path' setting")
self.server_proc = None
else:
global_vars._node_path = node_path
print("Trying to spawn node executable from: " + node_path)
try:
if os.name == "nt":
# linux subprocess module does not have STARTUPINFO
# so only use it if on Windows
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.SW_HIDE | subprocess.STARTF_USESHOWWINDOW
self.server_proc = subprocess.Popen([node_path, script_path],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, startupinfo=si)
else:
log.debug("opening " + node_path + " " + script_path)
self.server_proc = subprocess.Popen([node_path, script_path],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
except:
self.server_proc = None
# start reader thread
if self.server_proc and (not self.server_proc.poll()):
log.debug("server proc " + str(self.server_proc))
log.debug("starting reader thread")
readerThread = threading.Thread(target=ServerClient.__reader, args=(
self.server_proc.stdout, self.msgq, self.eventq, self.asyncReq, self.server_proc, self.event_handlers))
readerThread.daemon = True
readerThread.start()
评论列表
文章目录