Skip to content

Commit

Permalink
gui/applets: capture applet stdout/stderr and redirect to log. Closes #…
Browse files Browse the repository at this point in the history
sbourdeauducq committed Aug 4, 2016
1 parent f183f87 commit 591e44b
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions artiq/gui/applets.py
Original file line number Diff line number Diff line change
@@ -3,12 +3,15 @@
import sys
import string
import shlex
import os
import subprocess
from functools import partial
from itertools import count

from PyQt5 import QtCore, QtGui, QtWidgets

from artiq.protocols.pipe_ipc import AsyncioParentComm
from artiq.protocols.logging import LogParser
from artiq.protocols import pyon
from artiq.gui.tools import QDockWidgetCloseDetect

@@ -106,6 +109,9 @@ def rename(self, name):
self.applet_name = name
self.setWindowTitle("Applet: " + name)

def _get_log_source(self):
return "applet({})".format(self.applet_name)

async def start(self):
if self.starting_stopping:
return
@@ -121,12 +127,22 @@ async def start(self):
ipc_address=self.ipc.get_address().replace("\\", "\\\\")
)
logger.debug("starting command %s for %s", command, self.applet_name)
env = os.environ.copy()
env["PYTHONUNBUFFERED"] = "1"
try:
await self.ipc.create_subprocess(*shlex.split(command),
start_new_session=True)
await self.ipc.create_subprocess(
*shlex.split(command),
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
env=env, start_new_session=True)
except:
logger.warning("Applet %s failed to start", self.applet_name,
exc_info=True)
asyncio.ensure_future(
LogParser(self._get_log_source).stream_task(
self.ipc.process.stdout))
asyncio.ensure_future(
LogParser(self._get_log_source).stream_task(
self.ipc.process.stderr))
self.ipc.start(self.embed, self.fix_initial_size)
finally:
self.starting_stopping = False

0 comments on commit 591e44b

Please sign in to comment.