Files
dev/script/__Lib/diffcalc_old/diffcmd/diffcalc_launcher.py
2019-03-20 13:52:00 +01:00

87 lines
3.1 KiB
Python
Executable File

#!/usr/bin/python
import argparse
import subprocess
import os
import getpass
DIFFCALC_BIN = os.path.split(os.path.realpath(__file__))[0]
DIFFCALC_ROOT = os.path.abspath(os.path.join(DIFFCALC_BIN, os.pardir))
MODULE_FOR_MANUALS = '_make_sixcircle_manual'
def main():
parser = argparse.ArgumentParser(description='Diffcalc: A diffraction condition calculator of x-ray and neutron crystalography')
parser.add_argument('--modules', dest='show_modules', action='store_true',
help='list available modules')
parser.add_argument('--python', dest='use_python', action='store_true',
help='run within python rather than ipython')
parser.add_argument('--debug', dest='debug', action='store_true',
help='run in debug mode')
parser.add_argument('--make-manuals-source', dest='make_manuals', action='store_true',
help='make .rst manual files by running template through sixcircle')
parser.add_argument('--non-interactive', dest='non_interactive', action='store_true',
help='do not enter interactive mode after startup')
parser.add_argument('module', type=str, nargs='?',
help='the module to startup with')
args = parser.parse_args()
# Create list of available modules
module_names = []
for module_path in os.listdir(os.path.join(DIFFCALC_ROOT, 'startup')):
if not module_path.startswith('_') and module_path.endswith('.py'):
module_names.append(module_path.split('.')[0])
module_names.sort()
if args.show_modules:
print_available_modules(module_names)
exit(0)
if not args.make_manuals and not args.module:
print "A module name should be provided. Choose one of:"
print_available_modules(module_names)
exit(0)
if args.make_manuals:
if args.module:
print "When building the manuals no module should be given"
exit(1)
args.module = MODULE_FOR_MANUALS
if not args.make_manuals and args.module not in module_names:
print "The provided argument '%s' is not one of:" % args.module
print_available_modules(module_names)
exit(1)
env = os.environ.copy()
if 'PYTHONPATH' not in env:
env['PYTHONPATH'] = ''
env['PYTHONPATH'] = DIFFCALC_ROOT + ':' + env['PYTHONPATH']
diffcmd_start_path = os.path.join(DIFFCALC_ROOT, 'diffcmd', 'start.py')
if args.use_python:
cmd = 'python'
else: # ipython
cmd = 'ipython --no-banner --HistoryManager.hist_file=/tmp/ipython_hist_%s.sqlite' % getpass.getuser()
iflag = '' if args.non_interactive else '-i'
cmd = cmd + ' ' + ' '.join([iflag, diffcmd_start_path, args.module, str(args.debug)])
print 'Running: ' + cmd
rc = subprocess.call(cmd, env=env, shell=True)
exit(rc)
def print_available_modules(module_names):
lines = []
for m in sorted(module_names):
lines.append(' ' + m)
print '\n'.join(lines)
if __name__ == '__main__':
main()
#