Python System Command – os.system(),

Filed Under: Python

In this tutorial we will learn about Python System Command. Previously we learned about Python Random Number.

Python System Command

While making a program in python, you may need to exeucte some shell commands for your program. For example, if you use Pycharm IDE, you may notice that there is option to share your project on github. And you probably know that file transferring is done by git, which is operated using command line. So, Pycharm executes some shell commands in background to do it.

However, In this tutorial we will learn some basics about executing shell commands from your python code.

Python os.system() function

We can execute system command by using os.system() function. According to the official document, it has been said that

This is implemented by calling the Standard C function system(), and has the same limitations.

However, if command generates any output, it is sent to the interpreter standard output stream. Using this command is not recommended. In the following code we will try to know the version of git using the system command git --version.

import os

cmd = "git --version"

returned_value = os.system(cmd)  # returns the exit code in unix
print('returned value:', returned_value)

The following output found in ubuntu 16.04 where git is installed already.

git version 2.14.2
returned value: 0

Notice that we are not printing the git version command output to console, it’s being printed because console is the standard output stream here.

Python Function

In the previous section, we saw that os.system() function works fine. But it’s not recommended way to execute shell commands. We will use Python subprocess module to execute system commands.

We can run shell commands by using function. See the following code which is equivalent to the previous code.

import subprocess

cmd = "git --version"

returned_value =, shell=True)  # returns the exit code in unix
print('returned value:', returned_value)

And the output will be same also.
Python System Command

Python subprocess.check_output() function

So far, we executed the system commands with the help of python. But we could not manipulate the output produced by those commands. Using subprocess.check_output() function we can store the output in a variable.

import subprocess

cmd = "date"

# returns output as byte string
returned_output = subprocess.check_output(cmd)

# using decode() function to convert byte string to string
print('Current date is:', returned_output.decode("utf-8"))

It will produce output like the following

Current date is: Thu Oct  5 16:31:41 IST 2017

So, in the above sections we have discussed about basic ideas about executing python system command. But there is no limit in learning. If you wish, you can learn more about Python System command using subprocess module from official documentation.


  1. Eric Wess says:

    import subprocess

    # Command to execute
    cmd = “termux-location”

    # Execute Command
    ecmd = subprocess.check_output(cmd)

    # Save Output to Variable
    scmd = ecmd.decode(‘utf-8’)

    # Access data
    # Adjust right and left value to narrow in on desired information

  2. Ahmed Elgammudi says:

    a=os.popen(“python test”).read()
    a—->> ‘ ‘

  3. Shivam says:

    How can we access 3rd party cli commands like executing redis-cli commands or mongodb commands, in which a new shell is popped up

  4. Salome.Taylor says:

    The only way to achieve happiness is to cherish what you have and forget what you don’t have

    1. ab says:

      that’s great

  5. krishna says:

    how to store os.system output to a variable
    and print later

    is it possible

    1. wantyapps says:

      I have the same question too. How? The “subprocess” is returning NotADirectoryError: [Errno 20] Not a directory

    2. Comsavvy says:

      In order to capture the output generated, I will suggest you use method for that e.g.

      import subprocess as sub
      output =[‘ls’, ‘-l’], capture_output=True)


  6. Ubaid says:

    Hey Guys,

    I am using python3.6.9, need some help here – I am coming from a perl background, trying to find a way to run a command (say for example ‘df’ command and store the output of columns 2 and 6 (size and name) in a key,value pair in a hash(dict in python world) and/or push these into a list which can be called from anywhere in the script- I have not seen very many examples of this kind of logic – any help is appreciated.


  7. uttam kumar says:

    import subprocess
    cmd = “ps -ef | wc -l”
    returned_output = subprocess.check_output(cmd)

    not working in Case command using with pipe

    1. Luis Raúl Carmona RIOS says:

      How to solution this problem?

    2. Pravi says:

      Have you find the solution for this ?

    3. Nandini says:

      It works fine in Python3. In case, its still not working for you, try passing the cmd string as a raw input like this :
      cmd = r’ps -ef|wc -l’
      In that case, python will not treat the ‘|’ as special parameter (OR operator).

  8. abdallah says:

    with python 2 no need to decode ,

  9. shruhthilaya says:

    I want include a variable which stores the result of previous command in subprocess.Popen({“command here”],subprocess.PIPE)

    state = “here”
    cmd = [“”” grep -i $state /log/messages”””]

  10. Paulius says:

    Hello, what if after executing command, cmd prompts something like “Press any key to continue or ctrl-c to cancel” and I basically need to somehow send any key press. Thanks for post.

  11. M says:

    someone can share me the python os system need to try it this my

  12. adk says:

    If you just wanted to accomplish that then you could just do this:

    >>> text=’abc\ncde’
    >>> print(text,file=open(‘file1′,’w’))

    The file ‘file1’ will be saved to the current working directory. You can view this by:

    >>> import os
    >>> os.getcwd()

  13. divya says:

    I’m pretty new to python scripting, I’m trying to achieve the python equivalent of shell cmd = “echo -e “abc\ncde” >file1″

    The contents of file1 then looks like this:


    My python script has:

    cmd = “echo -e \”abc\ncde\” >file”

    However, when executing this my file looks like this:

    -e abc

    -e is an option for echo to recognise \n as new line character and should not be written to the file. Is there a way around this?

    1. Andy says:

      I’m using python 3.6.8.

      Here’s the fix:
      Just wrap it in triple quotes, remove the escapes on the quotes you had and specify the path to echo, such as /bin/echo.

      cmd = “””/bin/echo -e ”abc\ncde” >file”””

    2. Akinpelu Akinniyi says:

      I am trying to run “netsh wlan start hostednetwork” command but it’s telling me You must run this command from a command prompt with administrative privilege, what can i do pls

  14. Priyasha says:

    I am trying to use the check_output command to call “git branch -r –merged” as follows:

    import subprocess
    import os
    import sys
    import csv

    cmd = “git branch -r –merged”
    listed_merged_branches = subprocess.check_output(cmd)
    print (listed_merged_branches.decode(“utf-8”))

    i am getting callprocesserror

    Could you help please ?

    1. Thiago Bezerra says:

      Please try:

      listed_merged_branches = subprocess.check_output(([‘git’,’branch’,’-r’,’-merged’]))
      print (listed_merged_branches.decode(“utf-8”))

Comments are closed.

Generic selectors
Exact matches only
Search in title
Search in content