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