artiq/artiq/frontend/artiq_session.py

58 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
import sys
import subprocess
from artiq import __version__ as artiq_version
def get_argparser():
parser = argparse.ArgumentParser(
description="ARTIQ session manager. "
"Automatically runs the master, dashboard and "
"local controller manager on the current machine. "
"The latter requires the artiq-comtools package to "
"be installed.")
parser.add_argument("--version", action="version",
version="ARTIQ v{}".format(artiq_version),
help="print the ARTIQ version number")
parser.add_argument("-m", action="append", default=[],
help="add argument to the master command line")
parser.add_argument("-d", action="append", default=[],
help="add argument to the dashboard command line")
parser.add_argument("-c", action="append", default=[],
help="add argument to the controller manager command line")
return parser
def main():
args = get_argparser().parse_args()
master_cmd = [sys.executable, "-u", "-m", "artiq.frontend.artiq_master"]
dashboard_cmd = [sys.executable, "-m", "artiq.frontend.artiq_dashboard"]
ctlmgr_cmd = [sys.executable, "-m", "artiq_comtools.artiq_ctlmgr"]
master_cmd += args.m
dashboard_cmd += args.d
ctlmgr_cmd += args.c
with subprocess.Popen(master_cmd,
stdout=subprocess.PIPE, universal_newlines=True,
bufsize=1) as master:
master_ready = False
for line in iter(master.stdout.readline, ""):
sys.stdout.write(line)
if line.rstrip() == "ARTIQ master is now ready.":
master_ready = True
break
if master_ready:
with subprocess.Popen(dashboard_cmd):
with subprocess.Popen(ctlmgr_cmd):
for line in iter(master.stdout.readline, ""):
sys.stdout.write(line)
else:
print("session: master failed to start, exiting.")
if __name__ == "__main__":
main()