111 lines
5.3 KiB
Plaintext
111 lines
5.3 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
|
|
<title>JMRI: The Python/Jython language</title>
|
|
<!--#include virtual="/help/en/parts/Style.shtml" -->
|
|
</head>
|
|
<body>
|
|
<!--#include virtual="/help/en/parts/Header.shtml" -->
|
|
|
|
<div id="mBody">
|
|
<!--#include virtual="Sidebar.shtml" -->
|
|
|
|
<div id="mainContent">
|
|
<!-- Page Body -->
|
|
|
|
<h1>JMRI: The Python/Jython language</h1>
|
|
<a href="https://www.python.org/" target="_blank">Python</a> is a widely used scripting
|
|
language that's available on many types of computers. A Java-based variant, called <a href=
|
|
"https://www.jython.org/" target="_blank">Jython</a>, has been integrated with JMRI to make it
|
|
easy to control a model railroad from the command line of a computer. For our purposes, the
|
|
two languages are completely the same.
|
|
<p>If like me you prefer to read off paper, there are lots of books available on Python.
|
|
Perhaps one of the best for beginners is <a href="https://www.oreilly.com/library/view/learning-python-2nd/0596002815/"
|
|
target="_blank">"Learning Python"</a> published by O'Reilly. It contains more than you really
|
|
need to know, though.</p>
|
|
|
|
<p>The <a href="https://www.jython.org" target="_blank">jython.org site</a> has some
|
|
introductory information, also see the support on their Wiki, <a href="https://wiki.python.org/jython/"
|
|
target="_blank">https://wiki.python.org/jython/</a>.</p>
|
|
|
|
<p>Non-programmers might want to start with this <a href=
|
|
"https://wiki.python.org/moin/BeginnersGuide" target="_blank">Beginners Guide</a> listed on
|
|
the Jython wiki.</p>
|
|
|
|
<p>Looking at the examples in the "jython" directory in the JMRI distribution will also be of
|
|
value. See the <a href="Examples.shtml">examples page</a> for links to these sample
|
|
scripts.</p>
|
|
|
|
<h2>How do Jython and Python differ?</h2>
|
|
|
|
<div class="para">
|
|
<p>For the purposes of writing JMRI scripts, they don't differ very much. Most of the
|
|
differences involve what happens in somewhat contrived error cases. There are also some
|
|
restrictions on what you can do with the computer's configuration information, etc, in
|
|
Jython, but these are not things a JMRI script is likely to need.</p>
|
|
|
|
</div>
|
|
|
|
<h2>IMPORTANT INFORMATION ABOUT PROGRAM FORMATTING: INDENTATION MATTERS</h2>
|
|
|
|
<div class="para">
|
|
The single oddest thing about Python is that the indentation matters. Instead of using {
|
|
and } characters to indicate the beginning and end of a block or function, that's done with
|
|
indentation in Python. Of course, in a C-like language people usually indent blocks anyway,
|
|
but it takes a little getting used to that you <em>have</em> to do it in Python. You should
|
|
indent with four spaces for each level in your code. (Four is a convention, but it really
|
|
helps readability; using tabs can cause lots of confusion and is not recommended. Mixing
|
|
spaces and tabs is likely to cause lots of confusion; please don't do that)
|
|
<p>For example, this is a syntax error:</p>
|
|
<pre>
|
|
a = 15
|
|
print a
|
|
b = 21
|
|
</pre>because those statements, though logically grouped at the same level in the program, aren't
|
|
indented the same. This sounds like a pain at first, but you rapidly get used to it. Then it makes
|
|
things like the following pretty easy to read, without having to worry about where the { and } go:
|
|
|
|
<pre>
|
|
if ( now == -1 ) :
|
|
done = 1
|
|
else :
|
|
done = 0
|
|
print done
|
|
</pre>If you do get a message about "Syntax error", look at the indicated line number to see if
|
|
your indentation isn't lined up.
|
|
</div>
|
|
|
|
<a id="newJython"></a>
|
|
<h2>Is JMRI's support for Python complete?</h2>
|
|
JMRI scripting uses <a href="https://www.jython.org" target="_blank">Jython</a>, a
|
|
Java-implemented form of the Python language. The basic language is pretty complete, but not
|
|
all of the Python libraries are available. Some "import" statements that you might read in a
|
|
book might not work because of missing libraries.
|
|
<p>Support is improving all the time, though, and you might want to try a more modern version
|
|
of Jython than the one that JMRI distributes. To do that, install Jython on you computer,
|
|
then add a python.properties file in your <a href="../../setup/Files.shtml">user files
|
|
directory</a> or <a href="../../setup/Files.shtml">preferences directory</a> that sets the
|
|
python configuration variables, e.g. on Windows:</p>
|
|
|
|
<pre style="font-family: monospace;">
|
|
python.path = C:\\jython2.7.0\\Lib\\site\-packages
|
|
python.startup =
|
|
</pre>
|
|
<p>Note that the double-back-slashes are necessary. They'll appear as single-back-slashes in
|
|
the final value, which you can check with the "Context" item from the main JMRI Help menu. On
|
|
Mac use something like:</p>
|
|
|
|
<pre style="font-family: monospace;">
|
|
python.path = /Users/username/jython2.7.0/Lib/site-packages
|
|
python.startup =
|
|
</pre>or where-ever you've installed the new Jython. Linux is similar.
|
|
<!--#include virtual="/help/en/parts/Footer.shtml" -->
|
|
</div>
|
|
<!-- closes #mainContent-->
|
|
</div>
|
|
<!-- closes #mBody-->
|
|
<script src="/js/help.js"></script>
|
|
</body>
|
|
</html>
|