|
- #!/usr/bin/python
-
- from nilmdb.client.httpclient import HTTPClient, ClientError, ServerError
- from nilmdb.utils.printf import *
- import nilmrun
-
- import argparse
- import os
- import time
- import sys
-
- def main():
- """Run a command on the NilmRun server"""
- def_url = os.environ.get("NILMRUN_URL", "http://localhost/nilmrun/")
- parser = argparse.ArgumentParser(
- description = 'Run a command on the NilmRun server',
- formatter_class = argparse.ArgumentDefaultsHelpFormatter,
- version = nilmrun.__version__)
- group = parser.add_argument_group("Standard options")
- group.add_argument('-u', '--url',
- help = 'NilmRun server URL', default = def_url)
- group.add_argument('-n', '--noverify', action="store_true",
- help = 'Disable SSL certificate verification')
- group = parser.add_argument_group("Program")
- group.add_argument('-d', '--detach', action="store_true",
- help = 'Run process and return immediately without '
- 'printing its output')
- group.add_argument('cmd', help="Command to run")
- group.add_argument('arg', nargs=argparse.REMAINDER,
- help="Arguments for command")
- args = parser.parse_args()
-
- client = HTTPClient(baseurl = args.url, verify_ssl = not args.noverify)
-
- # Run command
- pid = client.post("run/command", { "argv": [ args.cmd ] + args.arg })
-
- # If we're detaching, just print the PID
- if args.detach:
- print(pid)
- raise SystemExit(0)
-
- # Otherwise, watch the log output, and kill the process when it's done
- # or when this script terminates.
- try:
- while True:
- s = client.get("process/status", { "pid": pid, "clear": 1 })
- sys.stdout.write(s['log'])
- sys.stdout.flush()
- if not s['alive']:
- break
- time.sleep(1)
- finally:
- s = client.post("process/remove", { "pid": pid })
-
- raise SystemExit(s['exitcode'])
-
- if __name__ == "__main__":
- main()
|