Environments

Where can I run Python code?

Python can be used in many different environments. Some applications already come with an embedded Python interpreter, so you can use Python as a scripting language to automate things that you would otherwise have to make ‘by hand’ (clicking around in menus and icons).

Most font editors today support scripting with Python: RoboFont, FontLab, Glyphs, FontForge.

Python is also supported by other kinds of applications, such as Blender and Rhino (3D modelling), SublimeText (code editor), DropBox (file hosting) and many others.

Python can also be used directly in the Terminal, to run existing scripts or in interactive mode.

Python-powered applications

DrawBot

../../../_images/drawbot.png

DrawBot is an enviroment to create 2D graphics with Python code. It was originally developed by Just van Rossum to teach programming to design students at the KABK.

The current version of DrawBot is developed in collaboration with Frederik Berlaen, who is also the author of RoboFont (see below). To learn more about DrawBot, have a look at the DrawBot documentation. For the brave, DrawBot’s source-code is available on Github.

DrawBot is available only for Mac OS X. It also exists as a RoboFont extension and as an experimental web-based app (TinyPy).

Similar applications have been developed for other enviroments, such as ShoeBot for Linux and Spryte for Windows. But the syntax used by these applications is sometimes different, breaking compatibility with DrawBot scripts.

RoboFont

../../../_images/robofont.png

RoboFont has a Python scripting environment, and is itself written in Python. Have a look at the RoboFont documentation to learn more.

Many aspects of the program’s interface and behaviour can be customized with code. Documentation about the RoboFont API can be found here.

RoboFont implements the RoboFab object model, a standardized way of working with fonts. It also adds a couple of extra methods and attributes to some objects.

RoboFont also makes it very easy to create and install Extensions. There are many open-source RoboFont extensions available on github.

FontLab

In FontLab, Python scripts can be written and run with help of the ‘Edit Macro’ window.

FontLab itself is not written in Python, but it has a Python API which gives access to most of its functions. However, this API is not very well documented, and is not very pythonic.

As an alternative, FontLab can also be scripted with help of the RoboFab library, which first needs to be downloaded and installed. RoboFab offers a more natural API, and also makes it possible to write scripts that work outside of FontLab (NoneLab).

Glyphs

The popular font editor Glyphs also has a Python scripting interface. As with FontLab, there are two ways to work with Python in Glyphs: by using its own object model and scripting API, or by using RoboFab, which needs to be installed first.

Python in Terminal

../../../_images/terminal.png

Python can be used directly in a console or command-line interface, outside of an existing application.

On MacOSX, this can be done via the Terminal, which can be found in your Applications / Utilities folder.

After launching Terminal, you will see something like this:

Last login: Wed Jul 23 05:01:17 on ttys000
username:~ username$

This is your default command-line prompt, with your own username.

There are two ways to use Python on the console: interactive mode, or running an existing script.

Interactive mode

To enter interactive mode in Terminal, simply type python in the command-line:

username:~ username$ python

You will probably see something like this:

Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

This command gives us some information about the current Python installation, and returns an interactive Python prompt.

We can type Python code in this prompt, and it gets executed as it goes.

Let’s start with a simple hello world:

>>> "hello world"
'hello world'

The same goes for mathematical expressions, in fact for any Python expression:

>>> 1 + 1
2

Note

In interactive mode, it is not necessary to use the print statement – expressions are executed and return the result.

It is also possible to write multi-line code in the interactive mode. Notice how the prompt changes to indicate that it is waiting for input:

>>> for i in range(7):
...     print i,
...
0 1 2 3 4 5 6

Running existing scripts

The interactive mode is useful for writing quick tests and short scripts, but it is not really suitable for working with larger pieces of code. When that is the case, it is better to write scripts as separate .py files, and use Terminal only to run them.

Let’s suppose we have the following Python script, which prints “hello world” as output:

print 'hello world'

This script is stored as a separate hello.py file.

To call this file from Terminal, we simply call the command python, followed by the path to the script file. A tip: instead of typing out the full path, you can simply drag the file from Finder to the Terminal:

username:~ username$ python /Users/username/Desktop/hello.py

The output will be, as expected:

hello world

Python in SublimeText

../../../_images/sublime-text.png

It is also possible to run Python scripts from inside SublimeText (our favorite code editor). To run a script, use the key combination Cmd+B — this will start your file in the console at the bottom of the editor.