Mercurial > cpython-lru_cache-weakref
comparison Mac/scripts/RunLibScript.py @ 2873:315760ba0041 legacy-trunk
A new home for scripts/applets
EditPythonPrefs - Edit the preferences file (sys.path, python home)
PackLibDir - Convert a sys.path directory to a resource file
RunLibScript - import a module and run as __main__
mkapplet - Create a python applet
The resource files belonging to these should also be stored here, somehow..
| author | Jack Jansen <jack.jansen@cwi.nl> |
|---|---|
| date | Sat, 29 Jul 1995 13:48:41 +0000 |
| parents | |
| children | 7eea9b426802 |
comparison
equal
deleted
inserted
replaced
| 2872:d3b07ba3e12d | 2873:315760ba0041 |
|---|---|
| 1 """Import a module while pretending its name is __main__. This | |
| 2 can be used to run scripts from the PackedLib resource file while pretending | |
| 3 they have been double-clicked.""" | |
| 4 | |
| 5 import imp | |
| 6 import sys | |
| 7 import os | |
| 8 import string | |
| 9 import Dlg | |
| 10 import macfs | |
| 11 | |
| 12 DIALOG_ID = 140 | |
| 13 OK = 1 | |
| 14 CANCEL = 2 | |
| 15 SCRIPTNAME=3 | |
| 16 ARGV=4 | |
| 17 STDIN_CONS=5 | |
| 18 STDIN_FILE=6 | |
| 19 STDOUT_CONS=7 | |
| 20 STDOUT_FILE=8 | |
| 21 WORKING_DIR=9 | |
| 22 PAUSE=10 | |
| 23 | |
| 24 def import_as_main(name): | |
| 25 fp, path, (suffix, mode, type) = imp.find_module(name) | |
| 26 if type == imp.PY_SOURCE: | |
| 27 imp.load_source('__main__', path) | |
| 28 elif type == imp.PY_COMPILED: | |
| 29 imp.load_compiled('__main__', path) | |
| 30 elif type == imp.PY_RESOURCE: | |
| 31 imp.load_resource('__main__', path) | |
| 32 | |
| 33 def interact(): | |
| 34 d = Dlg.GetNewDialog(DIALOG_ID, -1) | |
| 35 wdir = stdin = stdout = None | |
| 36 pause = 0 | |
| 37 | |
| 38 tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS) | |
| 39 tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE) | |
| 40 tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS) | |
| 41 tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE) | |
| 42 tp, pause_h, rect = d.GetDialogItem(PAUSE) | |
| 43 in_c_h = in_c_h.as_Control() | |
| 44 in_f_h = in_f_h.as_Control() | |
| 45 out_c_h = out_c_h.as_Control() | |
| 46 out_f_h = out_f_h.as_Control() | |
| 47 pause_h = pause_h.as_Control() | |
| 48 | |
| 49 while 1: | |
| 50 in_c_h.SetControlValue(not stdin) | |
| 51 in_f_h.SetControlValue(not not stdin) | |
| 52 out_c_h.SetControlValue(not stdout) | |
| 53 out_f_h.SetControlValue(not not stdout) | |
| 54 pause_h.SetControlValue(pause) | |
| 55 | |
| 56 n = Dlg.ModalDialog(None) | |
| 57 if n == OK: | |
| 58 break | |
| 59 elif n == CANCEL: | |
| 60 sys.exit(0) | |
| 61 elif n == STDIN_CONS: | |
| 62 stdin = None | |
| 63 elif n == STDIN_FILE: | |
| 64 fss, ok = macfs.StandardGetFile('TEXT') | |
| 65 if ok: | |
| 66 stdin = fss | |
| 67 elif n == STDOUT_FILE: | |
| 68 fss, ok = macfs.StandardPutFile('stdout:') | |
| 69 if ok: | |
| 70 stdout = fss | |
| 71 elif n == WORKING_DIR: | |
| 72 fss, ok = macfs.GetDirectory() | |
| 73 if ok: | |
| 74 wdir = fss | |
| 75 elif n == PAUSE: | |
| 76 pause = (not pause) | |
| 77 | |
| 78 tp, h, rect = d.GetDialogItem(SCRIPTNAME) | |
| 79 name = Dlg.GetDialogItemText(h) | |
| 80 tp, h, rect = d.GetDialogItem(ARGV) | |
| 81 argv = Dlg.GetDialogItemText(h) | |
| 82 return name, argv, stdin, stdout, wdir, pause | |
| 83 | |
| 84 def main(): | |
| 85 curdir = os.getcwd() | |
| 86 import Res | |
| 87 Res.OpenResFile('RunLibScript.rsrc') | |
| 88 name, argv, stdin, stdout, wdir, pause = interact() | |
| 89 if not name: | |
| 90 sys.exit(0) | |
| 91 sys.argv = [name] + string.split(argv) | |
| 92 if stdin: | |
| 93 sys.stdin = open(stdin.as_pathname()) | |
| 94 if stdout: | |
| 95 sys.stdout = open(stdout.as_pathname(), 'w') | |
| 96 if wdir: | |
| 97 os.chdir(wdir.as_pathname()) | |
| 98 else: | |
| 99 os.chdir(curdir) | |
| 100 | |
| 101 import_as_main(name) | |
| 102 | |
| 103 if pause: | |
| 104 sys.exit(1) | |
| 105 | |
| 106 if __name__ == '__main__': | |
| 107 main() | |
| 108 |
