Pythonからファイルを物理的に開きたいです。
※ ファイルをコード内で読み込む意味ではない
▼ 例えば次の場所にファイルがある
1 |
C:/hoge/hoge/dummy.txt |
▼ ファイルの場所(ディレクトリ)
1 |
C:/hoge/hoge |
こういったファイルの場所を次のように開きたい
- Windowsだったらエクスプローラーで、
- MacだったらFnderアプリで、
- LinuxならOS固有のソフトで開く…
こういった処理はPythonだけで可能です。
完全にマルチプラットにするのは難しいですが、
Pythonでファイルの場所を開く方法を考えてみます。
このページの目次
方法1.os.systemからOS固有のエクスプローラー起動
OS固有のエクスプローラーを直に起動する方法
まず実行中のOS種類を知らないといけません。
▼ 知るには次のコードで対応できる
1 2 3 4 |
import platform ## OS名を取得 os_name = platform.system() |
▼ 各OS環境では次の値が返ってくる
- Linux : "Linux"
- Mac : "Darwin"
- Windows : "Windows"
ほとんどそのままだけどMac OSで "Darwin" が返ってくるのはなぜなのか…そのまま "Mac" とか返してくれればいいのに謎ですね。(ググったらDarwinはApple開発のUnix系POSIX準拠OSらしい)
上記のようにOS名が取得できました。
そしたらOSごとに処理を切り分けるだけです。
▼ os.systemからOS固有のソフトを起動
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import platform import os ## OS名を取得 os_name = platform.system() ## 開きたいファイルパス file_name = "C:/hoge/hoge/dummy.txt" ## そのファイルのディレクトリ取得 dir_name = os.path.dirname(file_name) if os_name == 'Windows' : os.system('explorer.exe "%s"' % dir_name) elif os_name == "Darwin" : ## Mac固有のFinderを起動 pass elif os_name == "Linux" : ## Linux固有のソフトを起動 pass |
Windows限定ですが explorer.exe にファイルパス(正確にはディレクトリパス)を渡してます。その場所に移動した状態でエクスプローラーが起動します。
ただしMacとかLinuxの場合は知りません。
恐らくWindowsみたいな方法があるはずです。
分からないならググってください。
方法2.webbrowserからOS固有のエクスプローラー起動
Pythonにはwebbrowserモジュールがあります。
文字通りウェブブラウザ的な機能を持ってます。
URLを本来は渡して使うものなんですが、
ファイルパスを渡すとファイルを開くことも可能です。
▼ 例えばOS固有のエクスプローラー起動例
1 2 3 4 5 6 7 8 9 10 |
import webbrowser ## 開きたいファイルパス file_name = "C:/hoge/hoge/dummy.txt" ## そのファイルのディレクトリ取得 dir_name = os.path.dirname(file_name) ## OS固有のエクスプローラー起動 ## ただし起動できない場合もある webbrowser.open(dir) |
マルチプラットフォームで動かせる模様。
先ほどみたいにOS分岐も必要ありません。
少なくともWidnows10では正常に動きました。
ただしwebbrowser.openが失敗する可能性は0ではない
このモジュールはブラウザ機能の提供です。
エクスプローラー起動の提供ではありません。
▼ マニュアルでも次のように説明されてる
webbrowser.open(url, new=0, autoraise=True)
デフォルトのブラウザで url を表示します。new が 0 なら、url はブラウザの今までと同じウィンドウで開きます。new が 1 なら、可能であればブラウザの新しいウィンドウが開きます。new が 2 なら、可能であればブラウザの新しいタブが開きます。autoraise が True なら、可能であればウィンドウが前面に表示されます(多くのウィンドウマネージャではこの変数の設定に関わらず、前面に表示されます)。幾つかのプラットフォームにおいて、ファイル名をこの関数で開こうとすると、OSによって関連付けられたプログラムが起動されます。しかし、この動作はポータブルではありませんし、サポートされていません。
「OSによって関連付けられたプログラムが起動」
「しかし、この動作はポータブルではありません」
こういう但し書きが付いてるので注意です。
MacOSだったらFinderが起動するとは限らないし、
Linuxでも開くことに失敗する可能性があります。
そこは各OSごとの検証が必要になるでしょう。
という訳でPythonでOS固有のエクスプローラー起動でした。
ではまた。コード的な不備を見つけたら教えてください。