制限事項
os.startfile 関数 が使用できるのは Windows のみです。
Linux や macOS では エラー「AttributeError: module 'os' has no attribute 'startfile'」が発生します。
ファイルを関連付けされたアプリで開く方法
import os
os.startfile(ファイルパス)
ファイルを 印刷 や 編集 で開く
引数 operation に 'print' を指定すると 印刷モード、'edit' を指定すると 編集モード でアプリケーションが起動します。これはエクスプローラーでファイルを右クリックしたときに表示される「印刷(P)」「編集(E)」と同等です。operation 引数を省略すると 'open' となり、「開く(O)」の動作になります。import os
# 開く
os.startfile(ファイルパス)
os.startfile(ファイルパス, operation='open')
# 印刷
os.startfile(ファイルパス, operation='print')
# 編集
os.startfile(ファイルパス, operation='edit')

フォルダを開く
パスにフォルダを指定すると、指定したフォルダがエクスプローラーで開きます。import os
# フォルダを開く。既に開いていれば最前面にする。
os.startfile(フォルダパス)
os.startfile(フォルダパス, operation='open')
# フォルダを新しい画面で開く
os.startfile(フォルダパス, operation='explore')
# フォルダを検索モードで開く
os.startfile(フォルダパス, operation='find')

パスを指定するときの注意
相対パスで指定するとき、パス区切り文字に「/(スラッシュ)」を使用すると動作しません。# 相対パスで / は NG
# FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。
os.startfile(r'./dir/test.txt')
# 絶対パスで / は OK
os.startfile(r'D:/dir/test.txt')
対処方法1 パスを正規化
os.startfile 関数 でパスを正規化します。正規化すると、Windows では、スラッシュがバックスラッシュに変換されます。
# パスを正規化
os.startfile(os.path.normpath(r'./dir/test.txt'))
対処方法2 絶対パスに変換
os.path.abspath 関数を使用し、相対パスを絶対パスに変換します。abspath 関数を使用すると正規化も行われます。
# 相対パスを絶対パスに変換
os.startfile(os.path.abspath(r'./dir/test.txt'))
検証環境
- Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
- Python 3.9.7 (default, Sep 3 2021, 20:10:26) [GCC 10.2.1 20210110] on linux
- Docker image: python
- Docker Desktop 4.0.1(68347)
- Docker Engine 20.10.8
- Docker Compose 1.29.2
- Microsoft Windows 10 Pro Version 21H1 OS Build 19043.1288 Experience: Windows Feature Experience Pack 120.2212.3920.0