Source code for solsticepy.find_solstice

# This script finds the location of Solstice from the Windows Registry, assuming
# it was installed with ANU's NSIS-based installer. It works with Python 2.7 and
# Python 3.8, with both 32 and 64-bit versions, on both Windows 7 and Windows 10
# -- John Pye, April 2020

import sys, platform, os

[docs]def find_solstice_root(version_required=None,verbose=0): """Locate the place where Solstice files are installed on Windows ``Arguments`` * version_required (None or str): if not None, then enforce this specified version of Solstice (eg '0.9.0') * verbose (bool): if True, output file locations to stderr ``Return`` * dirn (str): the directory where Solstice is installed in the Windows system """ if verbose: sys.stderr.write("Python is running from %s\n"%(sys.executable,)) if not platform.system()=="Windows": raise RuntimeError("This function is only for Windows") # otherwise... if sys.version_info[0] < 3: if verbose: sys.stderr.write("Python 2, ") import _winreg as winreg else: if verbose: sys.stderr.write("Python 3, ") import winreg if sys.maxsize > 2**32: if verbose: sys.stderr.write("64-bit\n") # 64-bit Python key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"Software\Meso-Star\Solstice",0,winreg.KEY_READ) else: if verbose: sys.stderr.write("32-bit\n") key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"Software\Meso-Star\Solstice",0,winreg.KEY_WOW64_64KEY+winreg.KEY_READ) dirn, typd = winreg.QueryValueEx(key, 'root') ver, typv = winreg.QueryValueEx(key, 'version') if version_required: assert ver == version_required return dirn
[docs]def find_prog(name,version_required=None): """Find the path to any required Solstice executable program ``Arguments`` * name (str): stem-name (eg 'solpp') of the program (eg 'solpp.exe') required * version_required (None or str): if not None, then enforce this specified version of Solstice (e.g. '0.9.0') ``Return`` * path (str): path of the required Solstice executable program """ if platform.system()=="Windows": path = os.path.join(find_solstice_root(version_required),"bin","%s.exe"%(name,)); if not os.path.exists(path): raise RuntimeError("Program '%s' was not found at path '%s'"%(name,path)) return path else: # assume all solstice programs are on the PATH import subprocess with open(os.devnull, 'wb') as DEVNULL: proc = subprocess.run(['which',name],stdout=DEVNULL) if proc.returncode: raise RuntimeError("Program '%s' was not found in the PATH" %(name)) return name
if __name__=="__main__": dirn = find_solstice_root('0.9.0',verbose=1) sys.stderr.write("Solstice is installed in %s\n\n" %(dirn,)) # works both python2+3 :o) import subprocess, os spath = os.path.join(dirn,"bin","solstice.exe") # check that installed version of solstice is 0.9.0: proc = subprocess.run([spath,"--version"],encoding='utf-8',stdout=subprocess.PIPE) assert proc.stdout.strip() == "Solstice 0.9.0" # output the help text from solstice: subprocess.run([spath,"-h"]) # you should see the 'solstice -help' output shown in your console. # checked with Python 2.7 32-bit on Windows 7 # checked with Python 3.8.2 32-bit on Windows 10 # checked with Python 3.8.2 64-bit on Windows 10