Overview
Python is a very popular scripting language and like Perl and Ruby it was written and compiled in C and has full access to the C library which gives it access to all aspects of Linux. This notebook will demonstrate the basics of creating and running Python scripts on the Linux platform. Most of what is said also applies to using Python under the Bash shell for OsX and MS Windows (which comes with the Git for MS Windows)
Editing the Python Script file
The first step is to create a file with the Python script using a text editor. Although most systems come with the following 2 editiors already installed, this notebook will focus on the use of NANO.
EMACS is a powerful editor that comes with its own tutorial and understands the syntax of Python scripts. It has its own scripting and file handling capabilities making it a power IDE. The program has been designed to maximize the use of the keyboard, although there is mouse support in the GUI version that runs on the X Windows system of Linux. There so many functions in EMACS that there is even a wallchart
function to create a cheatsheet of the functions and key bindings.
NANO is a minimal editor that loads quickly and is useful a quick addition of a line or two. All the key binding to functions are listed on the bottom of the screen.
The process starts by type the editor name and the name of the Python script file you wish to create or edit. (It should be noted that Python script files generally take the extension .py
)
$ nano hello.py
This will launch the editor screen providing a cursor and listing of command key bindings:
GNU nano 2.9.3 hello.py
---------------------------------------------------
█
---------------------------------------------------
^G Get Help ^O Write Out ^W Where Is ^K Cut Text
^J Justify ^C Cur Pos ^X Exit ^R Read File
^\ Replace ^U Uncut Text^T To Linter ^_ Go To Line
At this point, you need to add the bang line to specify the location of the Python interpretor and the lines of the Python script.
#! /usr/bin/python
print "Hello ",
for i in range(5):
print i,
print " goodbye!"
It is important to note that the code must be entered with the corresponding whitespace as this is an important part of Python syntax. Once the script has been typed, it is written out to the file (^O)
and the editor is terminated (^X)
returning the user to the Bash shell. This will create a script file (hello.py)
which can be verified using the Bash ls
$ ls -l hello.py
-rw-r--r-- 1 rbatz rbatz 49 Jul 24 11:26 hello.py
At this point, the file is like any other text file.
Testing the script file
The simpliest way to run a Python script in a text file is to call the Python intepretor to read and execute the file.
$ python hello.py
Hello 0 1 2 3 4 goodbye!
Script files that also contain a bang comment line can also be converted to executable programs by changing the security mode of the file from 644 to 755
$ chmod 755 hello.py
$ ls -l hello.py
-rwxr-xr-x 1 rbatz rbatz 49 Jul 24 11:26 hello.py
At this point, the file can be executed directly within the Bash shell.
$ ./hello.py
Hello 0 1 2 3 4 goodbye!
In fact the file could be renamed to hello
and the utility will still work. If the directory is not among those listed in the $Path
vatiable, the utility will need to reference by full address or dot relative address.
$ mv hello.py hello
$ /home/bob/hello
Hello 0 1 2 3 4 goodbye
$ ./hello
Hello 0 1 2 3 4 goodbye
The final solution is to move the Python utility into one of the paths named in the $Path
variable.
$ echo $PATH
/home/bob/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:
$ mv hello /home/bob/bin
Once the Python utility is located in a directed listed in the path, the utility could be called by name from any directory on the system without any reference to its actual location.
$ hello
Hello 0 1 2 3 4 goodbye
LS0tCnRpdGxlOiAiUnVubmluZyBQeXRob24gVXRpbGl0aWVzIG9uIExpbnV4IgphdXRob3I6ICdEciBCb2IgQmF0emluZ2VyJwpkYXRlOiAnMjQgSnVseSAyMDIwJwpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cixlY2hvPUZBTFNFfQoga25pdHI6Om9wdHNfY2h1bmskc2V0KGVuZ2luZS5wYXRoID0gbGlzdCgKICBweXRob24gPSAnL3Vzci9iaW4vcHl0aG9uJywKICBydWJ5ID0gJy91c3IvL2Jpbi9ydWJ5JwopKQpgYGAKCiMjIE92ZXJ2aWV3CgpQeXRob24gaXMgYSB2ZXJ5IHBvcHVsYXIgc2NyaXB0aW5nIGxhbmd1YWdlIGFuZCBsaWtlIFBlcmwgYW5kIFJ1YnkgaXQgd2FzIHdyaXR0ZW4gYW5kIGNvbXBpbGVkIGluIEMgYW5kIGhhcyBmdWxsIGFjY2VzcyB0byB0aGUgQyBsaWJyYXJ5IHdoaWNoIGdpdmVzIGl0IGFjY2VzcyB0byBhbGwgYXNwZWN0cyBvZiBMaW51eC4gIFRoaXMgbm90ZWJvb2sgd2lsbCBkZW1vbnN0cmF0ZSB0aGUgYmFzaWNzIG9mIGNyZWF0aW5nIGFuZCBydW5uaW5nIFB5dGhvbiBzY3JpcHRzIG9uIHRoZSBMaW51eCBwbGF0Zm9ybS4gTW9zdCBvZiB3aGF0IGlzIHNhaWQgYWxzbyBhcHBsaWVzIHRvIHVzaW5nIFB5dGhvbiB1bmRlciB0aGUgQmFzaCBzaGVsbCBmb3IgT3NYIGFuZCBNUyBXaW5kb3dzICh3aGljaCBjb21lcyB3aXRoIHRoZSBHaXQgZm9yIE1TIFdpbmRvd3MpIAoKIyMgRWRpdGluZyB0aGUgUHl0aG9uIFNjcmlwdCBmaWxlCgpUaGUgZmlyc3Qgc3RlcCBpcyB0byBjcmVhdGUgYSBmaWxlIHdpdGggdGhlIFB5dGhvbiBzY3JpcHQgdXNpbmcgYSB0ZXh0IGVkaXRvci4gQWx0aG91Z2ggbW9zdCBzeXN0ZW1zIGNvbWUgd2l0aCB0aGUgZm9sbG93aW5nIDIgZWRpdGlvcnMgYWxyZWFkeSBpbnN0YWxsZWQsIHRoaXMgbm90ZWJvb2sgd2lsbCBmb2N1cyBvbiB0aGUgdXNlIG9mIE5BTk8uCgoxLiAqRU1BQ1MqIGlzIGEgcG93ZXJmdWwgZWRpdG9yIHRoYXQgY29tZXMgd2l0aCBpdHMgb3duIHR1dG9yaWFsIGFuZCB1bmRlcnN0YW5kcyB0aGUgc3ludGF4IG9mIFB5dGhvbiBzY3JpcHRzLiBJdCBoYXMgaXRzIG93biBzY3JpcHRpbmcgYW5kIGZpbGUgaGFuZGxpbmcgY2FwYWJpbGl0aWVzIG1ha2luZyBpdCBhIHBvd2VyIElERS4gVGhlIHByb2dyYW0gaGFzIGJlZW4gZGVzaWduZWQgdG8gbWF4aW1pemUgdGhlIHVzZSBvZiB0aGUga2V5Ym9hcmQsIGFsdGhvdWdoIHRoZXJlIGlzIG1vdXNlIHN1cHBvcnQgaW4gdGhlIEdVSSB2ZXJzaW9uIHRoYXQgcnVucyBvbiB0aGUgWCBXaW5kb3dzIHN5c3RlbSBvZiBMaW51eC4gVGhlcmUgc28gbWFueSBmdW5jdGlvbnMgaW4gRU1BQ1MgdGhhdCB0aGVyZSBpcyBldmVuIGEgYHdhbGxjaGFydGAgZnVuY3Rpb24gdG8gY3JlYXRlIGEgY2hlYXRzaGVldCBvZiB0aGUgZnVuY3Rpb25zIGFuZCBrZXkgYmluZGluZ3MuCgoyLiAqTkFOTyogaXMgYSBtaW5pbWFsIGVkaXRvciB0aGF0IGxvYWRzIHF1aWNrbHkgYW5kIGlzIHVzZWZ1bCBhIHF1aWNrIGFkZGl0aW9uIG9mIGEgbGluZSBvciB0d28uIEFsbCB0aGUga2V5IGJpbmRpbmcgdG8gZnVuY3Rpb25zIGFyZSBsaXN0ZWQgb24gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLgoKVGhlIHByb2Nlc3Mgc3RhcnRzIGJ5IHR5cGUgdGhlIGVkaXRvciBuYW1lIGFuZCB0aGUgbmFtZSBvZiB0aGUgUHl0aG9uIHNjcmlwdCBmaWxlIHlvdSB3aXNoIHRvIGNyZWF0ZSBvciBlZGl0LiAoSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgUHl0aG9uIHNjcmlwdCBmaWxlcyBnZW5lcmFsbHkgdGFrZSB0aGUgZXh0ZW5zaW9uIGAucHlgKQoKICAgICAkIG5hbm8gaGVsbG8ucHkKClRoaXMgd2lsbCBsYXVuY2ggdGhlIGVkaXRvciBzY3JlZW4gcHJvdmlkaW5nIGEgY3Vyc29yIGFuZCBsaXN0aW5nIG9mIGNvbW1hbmQga2V5IGJpbmRpbmdzOgoKICAgICBHTlUgbmFubyAyLjkuMyAgICAgICAgICAgICAgICAgICAgICAgaGVsbG8ucHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICDiloggCgoKICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIF5HIEdldCBIZWxwICBeTyBXcml0ZSBPdXQgXlcgV2hlcmUgSXMgIF5LIEN1dCBUZXh0CiAgICAgXkogSnVzdGlmeSAgIF5DIEN1ciBQb3MgICBeWCBFeGl0ICAgICAgXlIgUmVhZCBGaWxlIAogICAgIF5cIFJlcGxhY2UgICBeVSBVbmN1dCBUZXh0XlQgVG8gTGludGVyIF5fIEdvIFRvIExpbmUKCkF0IHRoaXMgcG9pbnQsIHlvdSBuZWVkIHRvIGFkZCB0aGUgYmFuZyBsaW5lIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0b3IgYW5kIHRoZSBsaW5lcyBvZiB0aGUgUHl0aG9uIHNjcmlwdC4KCiAgICAjISAvdXNyL2Jpbi9weXRob24KCiAgICBwcmludCAiSGVsbG8gIiwKICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgIHByaW50IGksCiAgICBwcmludCAiIGdvb2RieWUhIgogCkl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGNvZGUgbXVzdCBiZSBlbnRlcmVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2hpdGVzcGFjZSBhcyB0aGlzIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIFB5dGhvbiBzeW50YXguIE9uY2UgdGhlIHNjcmlwdCBoYXMgYmVlbiB0eXBlZCwgaXQgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGZpbGUgYCheTylgIGFuZCB0aGUgZWRpdG9yIGlzIHRlcm1pbmF0ZWQgYCheWClgIHJldHVybmluZyB0aGUgdXNlciB0byB0aGUgQmFzaCBzaGVsbC4gVGhpcyB3aWxsIGNyZWF0ZSBhIHNjcmlwdCBmaWxlIGAoaGVsbG8ucHkpYCB3aGljaCBjYW4gYmUgdmVyaWZpZWQgdXNpbmcgdGhlIEJhc2ggYGxzYCAKCiAgICAgICQgbHMgLWwgaGVsbG8ucHkKICAgICAgCiAgICAgIC1ydy1yLS1yLS0gMSByYmF0eiByYmF0eiA0OSBKdWwgMjQgMTE6MjYgaGVsbG8ucHkKCkF0IHRoaXMgcG9pbnQsIHRoZSBmaWxlIGlzIGxpa2UgYW55IG90aGVyIHRleHQgZmlsZS4KCiMjIFRlc3RpbmcgdGhlIHNjcmlwdCBmaWxlCgpUaGUgc2ltcGxpZXN0IHdheSB0byBydW4gYSBQeXRob24gc2NyaXB0IGluIGEgdGV4dCBmaWxlIGlzIHRvIGNhbGwgdGhlIFB5dGhvbiBpbnRlcHJldG9yIHRvIHJlYWQgYW5kIGV4ZWN1dGUgdGhlIGZpbGUuIAoKICAgICAkIHB5dGhvbiBoZWxsby5weQogICAgIAogICAgIEhlbGxvICAwIDEgMiAzIDQgIGdvb2RieWUhCgpTY3JpcHQgZmlsZXMgdGhhdCBhbHNvIGNvbnRhaW4gYSBiYW5nIGNvbW1lbnQgbGluZSBjYW4gYWxzbyBiZSBjb252ZXJ0ZWQgdG8gZXhlY3V0YWJsZSBwcm9ncmFtcyBieSBjaGFuZ2luZyB0aGUgc2VjdXJpdHkgbW9kZSBvZiB0aGUgZmlsZSBmcm9tIDY0NCB0byA3NTUKCiAgICAgJCBjaG1vZCA3NTUgaGVsbG8ucHkKICAgICAkIGxzIC1sIGhlbGxvLnB5CiAgICAgCiAgICAgLXJ3eHIteHIteCAxIHJiYXR6IHJiYXR6IDQ5IEp1bCAyNCAxMToyNiBoZWxsby5weQoKQXQgdGhpcyBwb2ludCwgdGhlIGZpbGUgY2FuIGJlIGV4ZWN1dGVkIGRpcmVjdGx5IHdpdGhpbiB0aGUgQmFzaCBzaGVsbC4KCiAgICAgJCAuL2hlbGxvLnB5CiAgICAgCiAgICAgIEhlbGxvICAwIDEgMiAzIDQgIGdvb2RieWUhCiAgICAgIApJbiBmYWN0IHRoZSBmaWxlIGNvdWxkIGJlIHJlbmFtZWQgdG8gYGhlbGxvYCBhbmQgdGhlIHV0aWxpdHkgd2lsbCBzdGlsbCB3b3JrLiBJZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhbW9uZyB0aG9zZSBsaXN0ZWQgaW4gdGhlIGAkUGF0aGAgdmF0aWFibGUsIHRoZSB1dGlsaXR5IHdpbGwgbmVlZCB0byByZWZlcmVuY2UgYnkgZnVsbCBhZGRyZXNzIG9yIGRvdCByZWxhdGl2ZSBhZGRyZXNzLgoKICAgICAkIG12IGhlbGxvLnB5IGhlbGxvCgogICAgICQgL2hvbWUvYm9iL2hlbGxvCiAgICAgCiAgICAgIEhlbGxvICAwIDEgMiAzIDQgIGdvb2RieWUKCiAgICAgJCAuL2hlbGxvCiAgICAgCiAgICAgIEhlbGxvICAwIDEgMiAzIDQgIGdvb2RieWUKClRoZSBmaW5hbCBzb2x1dGlvbiBpcyB0byBtb3ZlIHRoZSBQeXRob24gdXRpbGl0eSBpbnRvIG9uZSBvZiB0aGUgcGF0aHMgbmFtZWQgaW4gdGhlIGAkUGF0aGAgdmFyaWFibGUuIAoKICAgICAkIGVjaG8gJFBBVEgKICAgICAKICAgICAvaG9tZS9ib2IvYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbjovdXNyL2dhbWVzOi91c3IvbG9jYWwvZ2FtZXM6CgogICAgICQgbXYgaGVsbG8gL2hvbWUvYm9iL2JpbgogICAgIApPbmNlIHRoZSBQeXRob24gdXRpbGl0eSBpcyBsb2NhdGVkIGluIGEgZGlyZWN0ZWQgbGlzdGVkIGluIHRoZSBwYXRoLCB0aGUgdXRpbGl0eSBjb3VsZCBiZSBjYWxsZWQgYnkgbmFtZSBmcm9tIGFueSBkaXJlY3Rvcnkgb24gdGhlIHN5c3RlbSB3aXRob3V0IGFueSByZWZlcmVuY2UgdG8gaXRzIGFjdHVhbCBsb2NhdGlvbi4KCiAgICAgJCBoZWxsbwogICAgIAogICAgIEhlbGxvICAwIDEgMiAzIDQgIGdvb2RieWUKICAgICA=