os.system vs subprocess in python on linux

12,552

You should use subprocess. Not that it makes any difference, it's just a newer module intended to replace os.system (have a look at this section for a drop-in replacement). It also has more features in case you need them one day.

In short: there is no reason to use os.system (except for compatibility with older versions of Python).

Share:
12,552
alex_milhouse
Author by

alex_milhouse

Computer Engineer

Updated on June 14, 2022

Comments

  • alex_milhouse
    alex_milhouse about 2 years

    I have two python scripts. The first script calls a table of second scripts in which I need to execute a third party python script. It looks something like this:

    # the call from the first script. 
    cmd = "qsub -sync y -b -cwd -V -q long  -t 1-10 -tc 5 -N 'script_two' ./script2.py"
    
    script2thread = pexpect.spawn(cmd)
    
    # end of script 1 
    

    So here i am sending 10 jobs out to the queue. In script 2 I have a case statement based on the task_id. In each one I make a similar call to the third party script using different parameters.

    ...
    elif(task_id == 4)
    subprocess.call(./script3)
    
    # or 
    
    os.system(./script3 , shell=True)
    

    This is where my question lies. Is there a difference/benefit to using one or the other? I know that on windows using one over the other makes a big difference because of support issues but I am on linux and have no intention of running this on windows. Sometimes I get very weird results from using the subprocess, it cannot find other things on the network that it can when the third script is run independently one at a time.