web-dev-qa-db-ja.com

Python:Explorer / Nautilus / Mac-thingieでフォルダーを開く

私はPythonを使用していて、特定のフォルダのパスを持っています。そのシステムのデフォルトのフォルダーエクスプローラーを使用して開きます。たとえば、Windowsコンピューターの場合はエクスプローラーを使用し、Linuxの場合はNautilusなどのデフォルトを使用します。Macの場合は、Mac OSのエクスプローラーと呼ばれるものを使用します。

どうやってやるの?

34
Ram Rachum

* nixxdg-openを使用することについて誰も言及していないことに驚いています。これはファイルとフォルダの両方で機能します。

import os
import platform
import subprocess

def open_file(path):
    if platform.system() == "Windows":
        os.startfile(path)
    Elif platform.system() == "Darwin":
        subprocess.Popen(["open", path])
    else:
        subprocess.Popen(["xdg-open", path])
34
Cas

subprocessを使用できます。

import subprocess
import sys

if sys.platform == 'darwin':
    def openFolder(path):
        subprocess.check_call(['open', '--', path])
Elif sys.platform == 'linux2':
    def openFolder(path):
        subprocess.check_call(['xdg-open', '--', path])
Elif sys.platform == 'win32':
    def openFolder(path):
        subprocess.check_call(['Explorer', path])
17
Dietrich Epp

以下はMacintoshで動作します。

import webbrowser
webbrowser.open('file:///Users/test/test_folder')

GNU/Linuxでは、フォルダーの絶対パスを使用します。 (フォルダが存在することを確認してください)

import webbrowser
webbrowser.open('/home/test/test_folder')

他の回答で指摘されているように、Windowsでも機能します。

8
punchagan

オペレーティングシステムを検出し、それに応じて関連するファイルエクスプローラを起動する必要があると思います。

これは、OSXのFinderに役立つかもしれません: Python "show in Finder"

(以下は残念ながらWindowsでのみ機能します)

import webbrowser as wb
wb.open('C:/path/to/folder')

これはWindowsで動作します。 他のプラットフォームでも機能すると思います。誰か確認できますか? 確認済みのウィンドウのみ:(

2
Acorn

このような方法の1つのアプローチは、可読性を優先し、抽象化の抽出が容易になるようにコードを準備することです。 python高次関数機能を利用してこれらの行に沿って進み、特定のプラットフォームがサポートされていないときに適切な関数割り当てを行うことができない場合は例外をスローすることができます。

import subprocess
import sys


class UnsupportedPlatformException(Exception):
    pass


def _show_file_darwin():
    subprocess.check_call(["open", "--", path])

def _show_file_linux():
    subprocess.check_call(["xdg-open", "--", path])

def _show_file_win32():
    subprocess.check_call(["Explorer", "/select", path])

_show_file_func = {'darwin': _show_file_darwin, 
                   'linux': _show_file_linux,
                   'win32': _show_file_win32}

try:
    show_file = _show_file_func[sys.platform]
except KeyError:
    raise UnsupportedPlatformException


# then call show_file() as usual
0