- Run Python Scripts in Linux Command Line
- Method 1: Run it using python
- Method 2: Make Python script executable
- 2. Using the Python Interpreter¶
- 2.1.1. Argument Passing¶
- 2.1.2. Interactive Mode¶
- 2.2. The Interpreter and Its Environment¶
- 2.2.1. Source Code Encoding¶
- Table of Contents
- run python script directly from command line
- 3 Answers 3
- Universal running of Python scripts
- Shebangs ( #! ) are a Unix thing.
- Muddling through
- How to run python script on terminal (ubuntu)?
- 5 Answers 5
Run Python Scripts in Linux Command Line
This quick tip shows how to run Python programs from the Linux command line.
If you want to do something, it is pretty much guaranteed that there is a Python script for it. So, when you have a Python script, how do you run it?
The simplest way is to use the python or python3 command in the following manner:
Some distributions have used python2 as python and have an explicit command python3 for python3. So if you want Python 3 to be guaranteed, use python3 .
Method 1: Run it using python
The easiest method to run a Python script on any Linux distribution is by invoking the python command and provide it with the name of your Python script.
This will ensure that if the file’s contents are valid, it will be executed without any problems.
Method 2: Make Python script executable
You may have encountered executing bash scripts simply by typing out their relative/absolute path in the terminal. i.e. you never had to do a bash .sh like you do with Python scripts by typing python .py
In order to achieve this, a few things should be done first.
If you might have noticed, the bash scripts that you can execute by simply typing out their relative/absolute path, they are «executable» files.
To make your Python script executable, run the following command in your terminal:
This should be it. Right? I have a file hello.py , let’s try running it.
$ cat hello.py print("Hello Linux Handbook!") $ chmod +x hello.py $ ./hello.py ./hello.py: 1: Syntax error: word unexpected (expecting ")")
Uh oh. What? Syntax error? But it is a valid Python program/script.
The reason why we got this error is because by making hello.py an executable file, all we did was tell the shell that «You can execute it», but not what interpreter/program to use when it is being executed.
My shell (bash) thought that it was a bash script. And hence, we got this error.
The solution to overcome this is pretty simple. Add the following line to the first line of your Python script.
The #! syntax is used mostly in scripts (where you need an interpreter). Now, the /usr/bin/env part means that we are calling env to find the python command from $PATH and execute it for us.
This essentially starts Python for us, instead of the user needing to invoke it manually every time. And, if you don’t automate these things, are you even scripting?
Another reason to use env in shebang is to make it portable. Some systems have the Python executable interpreter stored as /usr/local/bin/python , while some might have /usr/bin/python .
Now, let’s try executing hello.py once again, but with the necessary changes made to it.
$ sed -i '1 i\#!/usr/bin/env python\n' hello.py $ cat hello.py #!/usr/bin/env python print("Hello Linux Handbook!") $ ./hello.py Hello Linux Handbook!
Oh hey! It runs flawlessly now.
Now that you know how to run Python programs from the terminal, how about learning to use Linux commands from Python scripts?
2. Using the Python Interpreter¶
The Python interpreter is usually installed as /usr/local/bin/python3.11 on those machines where it is available; putting /usr/local/bin in your Unix shell’s search path makes it possible to start it by typing the command:
to the shell. 1 Since the choice of the directory where the interpreter lives is an installation option, other places are possible; check with your local Python guru or system administrator. (E.g., /usr/local/python is a popular alternative location.)
On Windows machines where you have installed Python from the Microsoft Store , the python3.11 command will be available. If you have the py.exe launcher installed, you can use the py command. See Excursus: Setting environment variables for other ways to launch Python.
Typing an end-of-file character ( Control — D on Unix, Control — Z on Windows) at the primary prompt causes the interpreter to exit with a zero exit status. If that doesn’t work, you can exit the interpreter by typing the following command: quit() .
The interpreter’s line-editing features include interactive editing, history substitution and code completion on systems that support the GNU Readline library. Perhaps the quickest check to see whether command line editing is supported is typing Control — P to the first Python prompt you get. If it beeps, you have command line editing; see Appendix Interactive Input Editing and History Substitution for an introduction to the keys. If nothing appears to happen, or if ^P is echoed, command line editing isn’t available; you’ll only be able to use backspace to remove characters from the current line.
The interpreter operates somewhat like the Unix shell: when called with standard input connected to a tty device, it reads and executes commands interactively; when called with a file name argument or with a file as standard input, it reads and executes a script from that file.
A second way of starting the interpreter is python -c command [arg] . , which executes the statement(s) in command, analogous to the shell’s -c option. Since Python statements often contain spaces or other characters that are special to the shell, it is usually advised to quote command in its entirety.
Some Python modules are also useful as scripts. These can be invoked using python -m module [arg] . , which executes the source file for module as if you had spelled out its full name on the command line.
When a script file is used, it is sometimes useful to be able to run the script and enter interactive mode afterwards. This can be done by passing -i before the script.
All command line options are described in Command line and environment .
2.1.1. Argument Passing¶
When known to the interpreter, the script name and additional arguments thereafter are turned into a list of strings and assigned to the argv variable in the sys module. You can access this list by executing import sys . The length of the list is at least one; when no script and no arguments are given, sys.argv[0] is an empty string. When the script name is given as ‘-‘ (meaning standard input), sys.argv[0] is set to ‘-‘ . When -c command is used, sys.argv[0] is set to ‘-c’ . When -m module is used, sys.argv[0] is set to the full name of the located module. Options found after -c command or -m module are not consumed by the Python interpreter’s option processing but left in sys.argv for the command or module to handle.
2.1.2. Interactive Mode¶
When commands are read from a tty, the interpreter is said to be in interactive mode. In this mode it prompts for the next command with the primary prompt, usually three greater-than signs ( >>> ); for continuation lines it prompts with the secondary prompt, by default three dots ( . ). The interpreter prints a welcome message stating its version number and a copyright notice before printing the first prompt:
$ python3.11 Python 3.11 (default, April 4 2021, 09:25:04) [GCC 10.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Continuation lines are needed when entering a multi-line construct. As an example, take a look at this if statement:
>>> the_world_is_flat = True >>> if the_world_is_flat: . print("Be careful not to fall off!") . Be careful not to fall off!
For more on interactive mode, see Interactive Mode .
2.2. The Interpreter and Its Environment¶
2.2.1. Source Code Encoding¶
By default, Python source files are treated as encoded in UTF-8. In that encoding, characters of most languages in the world can be used simultaneously in string literals, identifiers and comments — although the standard library only uses ASCII characters for identifiers, a convention that any portable code should follow. To display all these characters properly, your editor must recognize that the file is UTF-8, and it must use a font that supports all the characters in the file.
To declare an encoding other than the default one, a special comment line should be added as the first line of the file. The syntax is as follows:
where encoding is one of the valid codecs supported by Python.
For example, to declare that Windows-1252 encoding is to be used, the first line of your source code file should be:
One exception to the first line rule is when the source code starts with a UNIX “shebang” line . In this case, the encoding declaration should be added as the second line of the file. For example:
#!/usr/bin/env python3 # -*- coding: cp1252 -*-
On Unix, the Python 3.x interpreter is by default not installed with the executable named python , so that it does not conflict with a simultaneously installed Python 2.x executable.
Table of Contents
run python script directly from command line
I put that at the top of a script. I’ve seen that should make the script runnable from the command line without the need for python programname.py . Unless I’m misunderstanding I should be able to use programname.py as long as I have the above line at the top of the script. Is this correct? It isn’t working for me I just get an error indicating that I would have to use python at the beginning of the ‘call’.
3 Answers 3
Universal running of Python scripts
You can pretty much universally run without the shebang ( #! ) with
Or nearly equivalently (it places the current directory on your path and executes the module named myscript ) (preferably do this!):
from the command line, as long as you have Python installed and on your path environment variable (i.e. set to run with python , which, if installed, would typically be the case).
Shebangs ( #! ) are a Unix thing.
The shebang, as you’re using it, is typically for running on a Unix platform (typically Apple or Linux). Windows would typically require cygwin to use the shebang.
You can usually default to whatever python is available on your system path with:
Assuming you’re on a Unix, you might try other locations for your python setup, like:
Muddling through
You can see what python you’re currently using by using the unix which command, so if you want to see where your python is coming from, use this command:
or on Windows (cygwin probably can run the shebang):
On Linux/Unix, you’ll need execution perms to run the file as well, in that manner. Use chmod
(chmod also may apply to Cygwin in Windows)
If you’re not running as root, you may require sudo , and that would be
And then attempt to run (within the same directory) with
How to run python script on terminal (ubuntu)?
I’m new with python, I’ve been learning for a few weeks. However now I’ve just changed my OS and I’m now using ubuntu and I can’t run any script on my terminal. I made sure to have the #!/usr/bin/env python but when I go to the terminal and type, for example python test.py the terminal shows an error message like this
I will just add a smal precision, if you use #!/usr/bin/env python you can just type ./test.py to execute your script as Terminal will take account of your header and use python to launch the script. But before you have to change execution permission by doing chmod +x test.py . I understand it can be a bit special for a beginner but you will appreciate this in the future 😉
5 Answers 5
python: can’t open file ‘test.py’: [Errno 2] No such file or directory
Means that the file «test.py» doesn’t exist. (Or, it does, but it isn’t in the current working directory.)
I must save the file in any specific folder to make it run on terminal?
No, it can be where ever you want. However, if you just say, «test.py», you’ll need to be in the directory containing test.py.
Your terminal (actually, the shell in the terminal) has a concept of «Current working directory», which is what directory (folder) it is currently «in».
Thus, if you type something like:
test.py needs to be in the current working directory. In Linux, you can change the current working directory with cd . You might want a tutorial if you’re new. (Note that the first hit on that search for me is this YouTube video. The author in the video is using a Mac, but both Mac and Linux use bash for a shell, so it should apply to you.)