PythonからOS固有エクスプローラーでファイルを開く方法を考える

Pythonからファイルを物理的に開きたいです。

※ ファイルをコード内で読み込む意味ではない

▼ 例えば次の場所にファイルがある

▼ ファイルの場所(ディレクトリ)

こういったファイルの場所を次のように開きたい

  • Windowsだったらエクスプローラーで、
  • MacだったらFnderアプリで、
  • LinuxならOS固有のソフトで開く…

こういった処理はPythonだけで可能です。

完全にマルチプラットにするのは難しいですが、
Pythonでファイルの場所を開く方法を考えてみます。

方法1.os.systemからOS固有のエクスプローラー起動

OS固有のエクスプローラーを直に起動する方法

まず実行中のOS種類を知らないといけません。

▼ 知るには次のコードで対応できる

▼ 各OS環境では次の値が返ってくる

  • Linux : "Linux"
  • Mac : "Darwin"
  • Windows : "Windows"

ほとんどそのままだけどMac OSで "Darwin"  が返ってくるのはなぜなのか…そのまま "Mac"  とか返してくれればいいのに謎ですね。(ググったらDarwinはApple開発のUnix系POSIX準拠OSらしい)

上記のようにOS名が取得できました。

そしたらOSごとに処理を切り分けるだけです。

▼ os.systemからOS固有のソフトを起動

Windows限定ですが explorer.exe にファイルパス(正確にはディレクトリパス)を渡してます。その場所に移動した状態でエクスプローラーが起動します。

ただしMacとかLinuxの場合は知りません。
恐らくWindowsみたいな方法があるはずです。

分からないならググってください。

方法2.webbrowserからOS固有のエクスプローラー起動

Pythonにはwebbrowserモジュールがあります。

文字通りウェブブラウザ的な機能を持ってます。

URLを本来は渡して使うものなんですが、
ファイルパスを渡すとファイルを開くことも可能です。

▼ 例えばOS固有のエクスプローラー起動例

マルチプラットフォームで動かせる模様。

先ほどみたいにOS分岐も必要ありません。

少なくともWidnows10では正常に動きました。

ただしwebbrowser.openが失敗する可能性は0ではない

このモジュールはブラウザ機能の提供です。

エクスプローラー起動の提供ではありません。

▼ マニュアルでも次のように説明されてる

webbrowser.open(url, new=0, autoraise=True)
デフォルトのブラウザで url を表示します。new が 0 なら、url はブラウザの今までと同じウィンドウで開きます。new が 1 なら、可能であればブラウザの新しいウィンドウが開きます。new が 2 なら、可能であればブラウザの新しいタブが開きます。autoraise が True なら、可能であればウィンドウが前面に表示されます(多くのウィンドウマネージャではこの変数の設定に関わらず、前面に表示されます)。

幾つかのプラットフォームにおいて、ファイル名をこの関数で開こうとすると、OSによって関連付けられたプログラムが起動されます。しかし、この動作はポータブルではありませんし、サポートされていません。

引用元 : https://docs.python.org/ja/3/library/webbrowser.html

「OSによって関連付けられたプログラムが起動」
「しかし、この動作はポータブルではありません」

こういう但し書きが付いてるので注意です。

MacOSだったらFinderが起動するとは限らないし、
Linuxでも開くことに失敗する可能性があります。

そこは各OSごとの検証が必要になるでしょう。

という訳でPythonでOS固有のエクスプローラー起動でした。

ではまた。コード的な不備を見つけたら教えてください。