В итоге нашел четыре способа для запуска любых файлов (правда у всех общая проблема - не запускаются файлы, если есть пробелы в имени или пути):
1. Самый простой и правильный, через subprocess:
import subprocess
subprocess.call("d:\\2014.xlsx", shell=True)
или
import subprocess
subprocess.Popen("d:\\2014.xlsx", shell=True)
Нашел в интернете:
Для запуска команд системы используется две функции subprocess.call() и subprocess.Popen(). Основное отличие этих функций между собой: функция subprocess.call() блокирует выполнение сценария до получения ответа, в то время как функция subprocess.Popen() - нет.
subprocess.call() - используется, если нужно просто запустить команду, а вывод от нее сохранять не требуется.
subprocess.Popen() - используется, если требуется захватить вывод команды
Все ОК, просто и четко.
2. Другой отличный вариант:
os.startfile('recomendations.log')
Эта функция открывает файл с помощью программы, указанной в реестре Windows для файлов этого типа.
3. Через win32com.client и WScript.Shell:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run('d:\meridian.jpg')
4. Метод, который не советую, через os:
import os
os.system(r'd:\2014.xlsx')
Выскакивает окно cmd.exe что плохо.