Coverage for gpaw/cli/python.py: 52%
27 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-07-09 00:21 +0000
1import argparse
2import runpy
3import sys
6class CLICommand:
7 """Run GPAW's Python interpreter."""
9 @staticmethod
10 def add_arguments(parser):
11 parser.add_argument(
12 '--dry-run', '-z', type=int, default=0,
13 metavar='NCPUS',
14 help='Dry run on NCPUS cpus.')
15 parser.add_argument(
16 '-d', '--debug', action='store_true',
17 help='Run in debug-mode.')
19 group = parser.add_mutually_exclusive_group()
20 group.add_argument(
21 '--command', '-c',
22 dest='cmd',
23 nargs=argparse.REMAINDER,
24 help='Program passed in as string (terminates option list).')
25 group.add_argument(
26 '--module', '-m',
27 nargs=argparse.REMAINDER,
28 help='Run library module as a script (terminates option list).')
30 parser.add_argument(
31 'arguments', metavar='ARG',
32 help='Arguments passed to program in '
33 'sys.argv[1:]. '
34 'Use -- to force all remaining arguments to be '
35 'passed to target program (useful for passing '
36 'options starting with -).',
37 nargs='*')
39 @staticmethod
40 def run(args):
41 from gpaw import all_lazy_imports, broadcast_imports, __getattr__
42 with broadcast_imports:
43 for attr in all_lazy_imports:
44 __getattr__(attr)
46 if args.cmd:
47 sys.argv[:] = ['-c'] + args.cmd[1:]
48 d = {}
49 exec(args.cmd[0], d, d)
50 elif args.module:
51 sys.argv[:] = args.module
52 runpy.run_module(args.module[0],
53 run_name='__main__',
54 alter_sys=True)
55 else:
56 sys.argv[:] = args.arguments
57 runpy.run_path(args.arguments[0], run_name='__main__')