Используйте модуль subprocess
, доступный на Python 2.4+, а не os.system()
, поэтому вам не нужно иметь дело с экранированием оболочки.
import subprocess, os
if sys.platform.startswith('darwin'):
subprocess.call(('open', filepath))
elif os.name == 'nt':
os.startfile(filepath)
elif os.name == 'posix':
subprocess.call(('xdg-open', filepath))
Двойные круглые скобки связаны с тем, что subprocess.call()
хочет, чтобы в качестве первого аргумента была последовательность, поэтому мы используем кортеж здесь. В Linux-системах с Gnome есть также команда gnome-open
, которая делает то же самое, но xdg-open
является стандартом Free Desktop Foundation и работает в среде рабочего стола Linux.