Running linux command from python

Python Execute Unix / Linux Command Examples

H ow do I execute standard Unix or Linux shell commands using Python? Is there a command to invoke Unix commands using Python programs?

Tutorial details
Difficulty level Easy
Root privileges No
Requirements Python
Est. reading time N/A

You can execute the command in a subshell using os.system() . This will call the Standard C function system(). This function will return the exit status of the process or command. This method is considered as old and not recommended, but presented here for historical reasons only. The subprocess module is recommended and it provides more powerful facilities for running command and retrieving their results.

os.system example (deprecated)

In this example, execute the date command:

In this example, execute the date command using os.popen() and store its output to the variable called now:

Say hello to subprocess

The os.system has many problems and subprocess is a much better way to executing unix command. The syntax is:

In this example, execute the date command:

You can pass the argument using the following syntax i.e run ls -l /etc/resolv.conf command:

Another example (passing command line args):

In this example, run ping command and display back its output:

The only problem with above code is that output, err = p.communicate() will block next statement till ping is completed i.e. you will not get real time output from the ping command. So you can use the following code to get real time output:

A quick video demo of above python code:

References:

🐧 Get the latest tutorials on Linux, Open Source & DevOps via

Category List of Unix and Linux commands
Documentation help • mandb • man • pinfo
Disk space analyzers df • duf • ncdu • pydf
File Management cat • cp • less • mkdir • more • tree
Firewall Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04
Linux Desktop Apps Skype • Spotify • VLC 3
Modern utilities bat • exa
Network Utilities NetHogs • dig • host • ip • nmap
OpenVPN CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04
Package Manager apk • apt
Processes Management bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop
Searching ag • grep • whereis • which
Shell builtins compgen • echo • printf
Text processing cut • rev
User Information groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w
WireGuard VPN Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04

Comments on this entry are closed.

307 ms?
That’s a long interval 😉

Hi, please more small and usefull examples with python like it! more code snippets!

A very comprehensive explanation, being useful to beginners to python.

where to find the command of linux

these commands are very helpfull us….please give more example like this.

What exactly does Shell=True does?
please tell the exact usage of the shell argumet.

First off, enjoy all your posts and youtube videos. Recently viewed your tutorial on installing freebsd. So thank you for sharing your knowledge.

I have a query regarding launching an external bash script file (.sh) in freebsd.
For linux I used:
os.system(‘sh ‘ + filepath)
For Mac:
os.system(‘open ‘ + filepath)
And for windows:
os.startfile(filepath)

I am unable to get any of these to work for freebsd. I know startfile is only for windows, however was wondering if there was an equivalent for freebsd without using subprocess. Or if not possible at all how to use subprocess to call a external script.

Also, in freebsd, what would be the equivalent of say:
sudo chown -R user:user file.bundle
as both sudo and chown are not installed by default.

Any help would be appreciated.

What if I want to create a variable in Python, then pass that variable to a bash command line?
Something like this:
….
celsius = sensor.read_temperature()
import subprocess
subprocess.call([“myscript.sh”, “-v”, “-t $celsius”])

Is that possible?

Of course you can. In python’s new formatting it would look like this:
subprocess.call([«myscript.sh», «-v», «-t <>«.format(celsius)])

I use split so I dont have to write literal arrays. Works most of the time.

Источник

Executing Shell Commands with Python

Python is an excellent scripting language. More and more sysadmins are using Python scripts to automate their work.

Since the sysadmin tasks involve Linux commands all the time, running Linux commands from the Python script is a great help.

In this tutorial, I’ll show you a couple of ways you can run shell commands and get its output in your Python program.

Execute Shell command in Python with os module

Let me create a simple python program that executes a shell command with the os module.

Now, if I run this program, here’s what I see in the output.

That’s the content of the directory where prog.py is stored.

If you want to use the output of the shell command, you can store it in a file directly from the shell command:

You can also store the output of the shell command in a variable in this way:

If you run the above program, it will print the content of the variable myCmd and it will be the same as the output of the ls command we saw earlier.

Now let’s see another way of running Linux command in Python.

Execute shell command in Python with subprocess module

A slightly better way of running shell commands in Python is using the subprocess module.

If you want to run a shell command without any options and arguments, you can call subprocess like this:

The call method will execute the shell command. You’ll see the content of the current working directory when you run the program:

If you want to provide the options and the arguments along with the shell command, you’ll have to provide them in a list.

When you run the program, you’ll see the content of the current directory in the list format.

Now that you know how to run shell command with subprocess, the question arises about storing the output of the shell command.

For this, you’ll have to use the Popen function. It outputs to the Popen object which has a communicate() method that can be used to get the standard output and error as a tuple. You can learn more about the subprocess module here.

When you run the program, you’ll see the stdout and stderr (which is none in this case).

I hope this quick tip helped you to execute shell command in Python programs. In a related quick tip, you can learn to write list to file in Python.

If you have questions or suggestions, please feel free to drop a comment below.

Источник

Python | Execute and parse Linux commands

Linux is one of the most popular operating systems and is a common choice for developers. It is popular because it is open source, it’s free and customizable, it is very robust and adaptable.

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning — Basic Level Course

An operating system mainly consists of two parts: The kernel and the Shell. The kernel basically handles communication between the software and the hardware. The shell takes inputs or commands from the user and produces an output. Most Linux distributions nowadays use the BASH shell (Bourne again shell). Shell commands and scripts are very powerful and are used commonly by developers.

In this article, we shall look at executing and parsing Linux commands using python.

Subprocess –

Subprocess is a module in Python that allows us to start new applications or processes in Python. This module intends to replace several older modules in python. We can use this module to run other programs or execute Linux commands.

Starting a process –

A new process can be spawned by using the Popen function defined in the subprocess module. It is a constructor for the Popen class that takes arguments to set up the new process. The underlying process creation and management in this module is handled by the Popen class.

Arguments:

  1. The first parameter is a list that contains the commands and their options if any.
    ex: [‘ls’, ‘-l’]
    the above example is equivalent to typing ‘ls -l’ in the terminal
  2. The second parameter is the stdout value. it specifies the standard output.
    ex: stdout = subprocess.PIPE
    This indicates that a new pipe or redirection should be created. The default value is
    “None”, which means that no redirection will occur.

We can retrieve the output of a command by using the communicate function. It reads data from stdout and stderr until it reaches the end-of-file and waits for the process to terminate. It returns a tuple that contains the output data and the error if any.

Syntax:

The output of the executed command is stored in data. Using these functions, we can execute Linux commands and fetch their output.

Listing the directories –

We can use the ‘ls’ command with options such as ‘-l’, ‘-al’, etc to list all the files in the current directory. We can then parse this output and print it in a presentable format. The get_permissions() function parses the output of the list command and retrieves only the names of the files and their corresponding permissions.

Источник

How to Run Linux Commands With Python on the Raspberry Pi

Python is the language of choice for shell scripting and task automation. It is popular in system administration because it can execute shell commands using only its default libraries. In this tutorial, you will learn how to run Linux shell commands with Python using the os and subprocess modules.

Introduction

Nowadays, automation is a buzzword as hot as a processor running at 100% in a room with no AC. Home management, data extraction, the omniscient talking boxes in the kitchen, and even self-driving cars—they are all products of automation. Well, it makes sense since we’re living in the fourth industrial revolution. Heard of it? It is where humans and machines try to work as one, and it is happening now.

Using a Raspberry Pi even opens more doors in automation. With its GPIO, you can interface the credit-card sized computer into almost anything that throws or receives digital data. And since it is a fully-fledged Linux computer, you can automate your computer tasks as well. What’s more, Python makes it unimaginably easier! There are two ways to run Linux commands with Python: using the os module and using the subprocess module.

Using the OS Module

First is the os module. According to official documentation, the os module provides a portable way of using operating system dependent functionality. Ain’t that convenient? With short python codes, you can already perform standard operating system tasks without having to interact with the Desktop interface. The system method allows you to do exactly this. To use it to run a Linux command, your code should look like below.

Sample Code using system()

This 4-liner checks your current directory, change location to your home directory, and lists all the contents in detail. It’s a pretty straightforward implementation, but there’s a downside. With system() , you are not allowed to store the resulting output as a variable.

Instead, you can use the popen() method, which is still under the os module. It opens a pipe from or to the command line. A pipe connects a command’s output to another command’s input. This makes it accessible within Python. To use popen() to store as a variable, see the example code below.

Sample code using popen()

If you print the stream variable, you will see its return data. This consists of the actual commands executed, the mode, and the address. Furthermore, if you want to get the whole output as one string, change readlines() to read() .

Using the Subprocess Module

The second way to run Linux commands with Python is by using the newer subprocess module. This module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. It was created to replace both os.system() and os.popen() functions.

The only method that matters in the subprocess is run() . With it, you can do everything we’ve done above and more using different arguments. Use the following codes as reference:

Writing a simple command using subprocess

Using the method like this will execute the command ls in your terminal. Unlike os.system() , it doesn’t work when you add a switch and enter it fully like subprocess.run(‘ls -la’) . This feature allows the method to take care of quoting and escaping problems hence preventing errors with formatting. To execute ls -la , you must pass the command as a list: subprocess.run([‘ls’,’-la’) . Alternatively, you can make the shell argument True to pass the whole thing as a string. Just take note that this can pose a security risk if you’re using an untrusted input source.

Writing a command with switches

Next, to store the command output inside a variable, simply do it just like any other data. The result won’t be what you’re expecting, however. Since the main purpose of ‘run’ is to execute the shell command within python, the result won’t be like the output you see in the terminal. It will be the return data just like in os.open . You can check it using the code below.

Storing the command output to a variable

This sketch dissects the return data of your command using the method’s arguments. Here are some of the frequently used ones:

  • args – returns the actual commands executed
  • returncode – returns the return code of the output; 0 means no error
  • stdout – captured stdout from the child process
  • stderr – captured stderr stream from the child process

Since we did not capture the previous code’s output, we will get ‘none’ with both stdout and stderr arguments. To enable the capture output argument, refer to the following code:

If you print x, you will get the list of items in your current directory of type bytes. Convert it to a string by writing x.stdout.decode() . Alternatively, you can pass the argument text=True with the main function. The output should now look exactly the same as what you have in the terminal.

Lastly, we will run Linux commands with Python and save the output you see in the terminal into a text file—a simple task with subprocess. You just need to redirect the stdout stream to your text file using the argument stdout .

Источник

Читайте также:  V ray для sketchup mac os
Оцените статью