X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/bad2a6a760528915012d999466368d751c172463..71b0d0fb51e3c54a7959f51fd4dbf523fbaf57db:/sdk/python/bin/arv-mount diff --git a/sdk/python/bin/arv-mount b/sdk/python/bin/arv-mount index 0cab824613..5e773dfbc6 100755 --- a/sdk/python/bin/arv-mount +++ b/sdk/python/bin/arv-mount @@ -3,17 +3,23 @@ from arvados.fuse import * import arvados import subprocess +import argparse if __name__ == '__main__': - api = arvados.api() - # Handle command line parameters parser = argparse.ArgumentParser( - description='Mount Keep data under the local filesystem.') + description='Mount Keep data under the local filesystem.', + epilog=""" +Note: When using the --exec feature, you must either specify the +mountpoint before --exec, or mark the end of your --exec arguments +with "--". +""") parser.add_argument('mountpoint', type=str, help="""Mount point.""") parser.add_argument('--collection', type=str, help="""Collection locator""") parser.add_argument('--debug', action='store_true', help="""Debug mode""") - parser.add_argument('--exec', type=str, help="""Mount, run a command, then unmount and exit""", dest="ex") + parser.add_argument('--exec', type=str, nargs=argparse.REMAINDER, + dest="exec_args", metavar=('command', 'args', '...', '--'), + help="""Mount, run a command, then unmount and exit""") args = parser.parse_args() @@ -38,19 +44,23 @@ if __name__ == '__main__': # Initialize the fuse connection llfuse.init(operations, args.mountpoint, opts) - if args.ex: + if args.exec_args: t = threading.Thread(None, lambda: llfuse.main()) t.start() # wait until the driver is finished initializing operations.initlock.wait() + rc = 255 try: - rc = subprocess.call(args.ex, shell=True) - except: - rc = 255 + rc = subprocess.call(args.exec_args, shell=False) + except OSError as e: + sys.stderr.write('arv-mount: %s -- exec %s\n' % (str(e), args.exec_args)) + rc = e.errno + except Exception as e: + sys.stderr.write('arv-mount: %s\n' % str(e)) finally: - subprocess.call(["fusermount", "-u", args.mountpoint]) + subprocess.call(["fusermount", "-u", "-z", args.mountpoint]) exit(rc) else: