diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2001-08-27 21:17:44 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2001-08-27 21:17:44 (GMT) |
commit | 8f2b13efce66d1ce66060d55f26753d0e593d19f (patch) | |
tree | 0bbebe473c62673fcb94908db9674bd4743aa3f8 /Mac/Unsupported/RunLibScript.py | |
parent | cd8a127e1a0dac4a4cd4b12bdffe8a17dd75cef9 (diff) | |
download | cpython-8f2b13efce66d1ce66060d55f26753d0e593d19f.zip cpython-8f2b13efce66d1ce66060d55f26753d0e593d19f.tar.gz cpython-8f2b13efce66d1ce66060d55f26753d0e593d19f.tar.bz2 |
These have long outlived there usefulness, in my opinion. Moved to Unsupported.
Diffstat (limited to 'Mac/Unsupported/RunLibScript.py')
-rw-r--r-- | Mac/Unsupported/RunLibScript.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Mac/Unsupported/RunLibScript.py b/Mac/Unsupported/RunLibScript.py new file mode 100644 index 0000000..6ecf643 --- /dev/null +++ b/Mac/Unsupported/RunLibScript.py @@ -0,0 +1,111 @@ +"""Import a module while pretending its name is __main__. This +can be used to run scripts from the PackedLib resource file while pretending +they have been double-clicked.""" + +import imp +import sys +import os +import string +from Carbon import Dlg +import macfs + +DIALOG_ID = 512 +OK = 1 +CANCEL = 2 +SCRIPTNAME=3 +ARGV=4 +STDIN_CONS=5 +STDIN_FILE=6 +STDOUT_CONS=7 +STDOUT_FILE=8 +WORKING_DIR=9 +PAUSE=10 + +def import_as_main(name): + fp, path, (suffix, mode, type) = imp.find_module(name) + if type == imp.PY_SOURCE: + imp.load_source('__main__', path, fp) + elif type == imp.PY_COMPILED: + imp.load_compiled('__main__', path, fp) + elif type == imp.PY_RESOURCE: + imp.load_resource('__main__', path) + +def interact(): + d = Dlg.GetNewDialog(DIALOG_ID, -1) + wdir = stdin = stdout = None + pause = 0 + + tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS) + tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE) + tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS) + tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE) + tp, pause_h, rect = d.GetDialogItem(PAUSE) + in_c_h = in_c_h.as_Control() + in_f_h = in_f_h.as_Control() + out_c_h = out_c_h.as_Control() + out_f_h = out_f_h.as_Control() + pause_h = pause_h.as_Control() + + while 1: + in_c_h.SetControlValue(not stdin) + in_f_h.SetControlValue(not not stdin) + out_c_h.SetControlValue(not stdout) + out_f_h.SetControlValue(not not stdout) + pause_h.SetControlValue(pause) + + n = Dlg.ModalDialog(None) + if n == OK: + break + elif n == CANCEL: + sys.exit(0) + elif n == STDIN_CONS: + stdin = None + elif n == STDIN_FILE: + fss, ok = macfs.StandardGetFile('TEXT') + if ok: + stdin = fss + elif n == STDOUT_FILE: + fss, ok = macfs.StandardPutFile('stdout:') + if ok: + stdout = fss + elif n == WORKING_DIR: + fss, ok = macfs.GetDirectory() + if ok: + wdir = fss + elif n == PAUSE: + pause = (not pause) + + tp, h, rect = d.GetDialogItem(SCRIPTNAME) + name = Dlg.GetDialogItemText(h) + tp, h, rect = d.GetDialogItem(ARGV) + argv = Dlg.GetDialogItemText(h) + return name, argv, stdin, stdout, wdir, pause + +def main(): + curdir = os.getcwd() + from Carbon import Res + try: + Res.FSpOpenResFile('RunLibScript.rsrc', 1) + except: + pass # Assume we're an applet already + name, argv, stdin, stdout, wdir, pause = interact() + if not name: + sys.exit(0) + sys.argv = [name] + string.split(argv) + if stdin: + sys.stdin = open(stdin.as_pathname()) + if stdout: + sys.stdout = open(stdout.as_pathname(), 'w') + if wdir: + os.chdir(wdir.as_pathname()) + else: + os.chdir(curdir) + + import_as_main(name) + + if pause: + sys.exit(1) + +if __name__ == '__main__': + main() + |