View difference between Paste ID: aAuJ91FQ and
SHOW:
|
|
- or go back to the newest paste.
1 | @Echo Off | |
2 | ||
3 | REM DevPlayer@gmail.com | |
4 | REM 2011-Oct-3 | |
5 | ||
6 | REM This will run a python module if the version is correct. | |
7 | REM the Python version is done before any modules are run. | |
8 | ||
9 | REM Some benefits to this script are: | |
10 | REM no files are created; avoids file write permission issues | |
11 | REM no environment varibles are created; avoids permission issues | |
12 | REM no Python modules are run; avoids syntax exceptions between | |
13 | REM Python versions | |
14 | ||
15 | REM Some cons are: | |
16 | REM This is a post Window 2000++ script; Win XP and later work. | |
17 | REM This is not a unix/linux script although it can be adapted. | |
18 | REM It is likely that not all Python interpreters support the | |
19 | REM the -V option or push the -V output to stderr; | |
20 | REM In which case just remove 2>&1 | |
21 | REM Assumes the output to be formatted like "Python x.y" | |
22 | REM You have to run this script every time to launch your Python | |
23 | REM app to benefit from this check. | |
24 | REM So therefore you need to include it in your distribution | |
25 | ||
26 | REM http://www.fpschultze.de/modules/smartfaq/faq.php?faqid=17 | |
27 | REM Read on 2011-Oct-3 | |
28 | ||
29 | REM Try this at Windows/DOS command prompt to see: | |
30 | REM python.exe -V | |
31 | ||
32 | REM This should send a string like "Python 2.7" without quotation marks, | |
33 | REM to stderr (prints to console) | |
34 | ||
35 | REM If your python.exe version doesn't support the -V option | |
36 | REM this batch will still work. | |
37 | ||
38 | REM This is not Python. | |
39 | REM GENERALLY use " (double qoutes) in Windows DOS scripts/batch files. | |
40 | REM Do not use ' (single quotes) unless the DOS command supports it | |
41 | ||
42 | REM I only had one version of Python.exe on my system. | |
43 | REM I don't know what text other versions of "python.exe -V" will return. | |
44 | ||
45 | REM My version returns "Python 2.7" without the quotes, | |
46 | REM even though I have version 2.7.0 | |
47 | ||
48 | REM Perhaps other people with other versions of Python can post what | |
49 | REM their version of "python.exe -V" returns textually. I could then | |
50 | REM update MS-Windows XP script. | |
51 | ||
52 | REM Versions of Microsoft Windows OSes after MS-Windows XP Pro | |
53 | REM will likely run this script fine. | |
54 | REM It is very likely this script can be converted to a linux version. | |
55 | ||
56 | REM alternate: python -c "import sys; print sys.version_info" > pyver.txt | |
57 | ||
58 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.7" > Nul | |
59 | If Not ErrorLevel 1 Goto Python27 | |
60 | ||
61 | REM Here is the break down of that DOS line | |
62 | REM "FOR /F", "IN", "DO", "ECHO" are internal DOS commands; ie part of cmd.exe | |
63 | ||
64 | REM "tokens=1,2" | |
65 | REM is a paramater for the "FOR /F" DOS command. | |
66 | REM It implicidly means "tokens=1,2 delims= " | |
67 | ||
68 | REM "delims= " means break down the string at every space character. | |
69 | REM So a string like "Python 2.7" will be broken down into: | |
70 | REM "Python" and "2.7" | |
71 | REM "delims" means delimiter | |
72 | ||
73 | REM "tokens=1,2" %%G | |
74 | REM means grab the "word zero" and grab "word one" | |
75 | REM in the string and put "word zero" (ie token 1) into variable | |
76 | REM %%G and "word one" (ie token 2) into variable %%H. | |
77 | ||
78 | REM Where did %%H come from? | |
79 | REM For each token in string, create a script varaible starting | |
80 | REM with %%G as the first varible name. | |
81 | REM This is an implicid feature of "FOR /F"; | |
82 | REM max is 26 %%A-%%Z. | |
83 | ||
84 | REM IN | |
85 | REM means: in the string returned by the following -thing- | |
86 | ||
87 | REM q:\python27\python.exe -V | |
88 | REM tells python.exe to use the -V argument; | |
89 | REM which means print out the Python version | |
90 | REM to stderr and then exit (python.exe) | |
91 | ||
92 | REM 2>&1 | |
93 | REM means to tell the comand to redirect whatever is sent | |
94 | REM to stderr to stdout. | |
95 | ||
96 | REM In Lunix you could use just 2>& I believe | |
97 | REM python.exe -V prints the version to stderr, not stdout. | |
98 | REM So this needs to be redirected to stdout to make it | |
99 | REM a string that can be used by a DOS SCRIPT | |
100 | ||
101 | REM "python.exe -V 2>&1" | |
102 | REM The double quotation marks are needed | |
103 | REM because there are command parameters seperated by spaces | |
104 | REM and redirection, stderr to stdout, in the command | |
105 | ||
106 | REM (' ..."python.exe.." ') | |
107 | REM The parenthesis and single quotes tell the "FOR /F" command | |
108 | REM to execute the string as if the user typed it at the | |
109 | REM command prompt' and from that output of that execution | |
110 | REM put that output into a string usable by the "FOR /F" command. | |
111 | ||
112 | REM DO | |
113 | REM "DO" is part of the "FOR /F" command | |
114 | ||
115 | REM ECHO %%H | |
116 | REM write %%H to stdout; not that it is not %%G which would | |
117 | REM normally be the string "Python" | |
118 | ||
119 | REM | find "2.7" > Nul | |
120 | REM | == pipe | |
121 | REM find "2.7" | |
122 | REM is a DOS command that will search for a string "2.7" | |
123 | REM note the double quotes, no single quotes | |
124 | REM so pipe a string into find and compare to "2.7" | |
125 | REM and MOST importantly if it matches return with an | |
126 | REM Errorlevel of 1 if there is a match | |
127 | REM > Nul | |
128 | REM and send the search results, ie the output (not exit code) | |
129 | REM to the nul device instead of stderr or stdout. | |
130 | REM The user doesn't need to see that. | |
131 | ||
132 | REM If Not ErrorLevel 1 Goto Python27 | |
133 | REM means if "find"'s exit code is 1 then jump to the script | |
134 | REM section labeld Python27. | |
135 | REM A DOS lable is aline that starts with :<text> | |
136 | ||
137 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.4" > Nul | |
138 | If Not ErrorLevel 1 Goto Python24 | |
139 | ||
140 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.5" > Nul | |
141 | If Not ErrorLevel 1 Goto Python25 | |
142 | ||
143 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.6" > Nul | |
144 | If Not ErrorLevel 1 Goto Python26 | |
145 | ||
146 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.7" > Nul | |
147 | If Not ErrorLevel 1 Goto Python27 | |
148 | ||
149 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.8" > Nul | |
150 | If Not ErrorLevel 1 Goto Python28 | |
151 | ||
152 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "2.9" > Nul | |
153 | If Not ErrorLevel 1 Goto Python29 | |
154 | ||
155 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "3.0" > Nul | |
156 | If Not ErrorLevel 1 Goto Python30 | |
157 | ||
158 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "3.1" > Nul | |
159 | If Not ErrorLevel 1 Goto Python31 | |
160 | ||
161 | FOR /F "tokens=1,2" %%G IN ('"python.exe -V 2>&1"') DO ECHO %%H | find "3.2" > Nul | |
162 | If Not ErrorLevel 1 Goto Python32 | |
163 | ||
164 | Goto :EOF | |
165 | ||
166 | REM ------------------------------------ | |
167 | ::Python 2.4 code | |
168 | :Python24 | |
169 | echo FOUND 2.4 | |
170 | python.exe my_python_app24.py | |
171 | goto :EOF | |
172 | ||
173 | ::Python 2.5 code | |
174 | :Python25 | |
175 | echo FOUND 2.5 | |
176 | python.exe my_python_app25.py | |
177 | goto :EOF | |
178 | ||
179 | ::Python 2.6 code | |
180 | :Python26 | |
181 | echo FOUND 2.6 | |
182 | python.exe my_python_app26.py | |
183 | goto :EOF | |
184 | ||
185 | ::Python 2.7 code | |
186 | :Python27 | |
187 | echo FOUND 2.7 | |
188 | python.exe my_python_app27.py | |
189 | goto :EOF | |
190 | ||
191 | :: Python 2.8 | |
192 | :Python28 | |
193 | echo Python 2.8 found | |
194 | python.exe my_python_app28.py | |
195 | goto :EOF | |
196 | ||
197 | :: Python 2.9; doesn't exist yet | |
198 | :Python29 | |
199 | echo Python 2.9 found | |
200 | python.exe my_python_app29.py | |
201 | goto :EOF | |
202 | ||
203 | :: Python 3.0 | |
204 | :Python30 | |
205 | echo Python 3.0 found | |
206 | python.exe my_python_app30.py | |
207 | goto :EOF | |
208 | ||
209 | :: Python 3.1 | |
210 | :Python31 | |
211 | echo Python 3.1 found | |
212 | python.exe my_python_app31.py | |
213 | goto :EOF | |
214 | ||
215 | :: Python 3.2 | |
216 | :Python32 | |
217 | echo Python 3.2 found | |
218 | python.exe my_python_app32.py | |
219 | goto :EOF | |
220 | ||
221 | ::EOF | |
222 | :EOF | |
223 | ||
224 |