Python try block does not catch os.system exceptions

Cinder picture Cinder · Sep 11, 2012 · Viewed 46.9k times · Source

I have this python code:

import os
try:
  os.system('wrongcommand')
except:
  print("command does not work")

The code prints:

wrongcommand: command not found

Instead of command does not work. Does anyone know why it's not printing my error message?

Answer

mgilson picture mgilson · Sep 11, 2012

If you want to have an exception thrown when the command doesn't exist, you should use subprocess:

import subprocess
try:
    subprocess.run(['wrongcommand'], check = True)
except subprocess.CalledProcessError:
    print ('wrongcommand does not exist')

Come to think of it, you should probably use subprocess instead of os.system anyway ...