5

「ユーザーのデスクトップへのパスを見つけるにはどうすればよいですか」に対するいくつかの質問と回答を見つけましたが、私の心の中ではそれらはすべて機能していません(少なくとも私が見つけたもの)。その理由は、ユーザーが英語以外のLinuxをインストールしている場合、デスクトップが。以外の場所にある可能性があるため~/Desktopです。スウェーデン語の場合、私はそれがにあると信じてい~/Skrivbordます。そして、ユーザーが自分のデスクトップをどこに配置することを決めたのか誰が知っていますか?

そのため、以下は機能しません(またはその変形):

os.sep.join((os.path.expanduser("~"), "Desktop"))

したがって、問題は次のとおりです。

Linuxで、Pythonで、英語のデフォルトのディレクトリ構造を前提とせずに、ユーザーのデスクトップへの実際のパスを取得するにはどうすればよいですか?

4

2 に答える 2

6

ファイルから直接読み取る代わりに、ユーティリティ~/.config/user-dirs.dirsを呼び出すことができます。xdg-user-dir

import subprocess
subprocess.check_output(['xdg-user-dir', 'DESKTOP'])

これは、freedesktop仕様に準拠したDEを持つすべてのLinuxディストリビューションで機能します。つまり、KDE、Gnome、XFCEなど(OPによってすでに投稿されているソリューションとまったく同じです)。

編集:

subprocess.check_output引数をリストに含める必要があるため、更新しました。また、DESKTOPをたとえばDOCUMENTSに変更して、そのフォルダーを取得できることも指摘しておく価値があります。

于 2012-12-06T22:29:18.910 に答える
0

上記の@JoachimPileborgのリンクを使用して:freedesktop.org/wiki/Software/xdg-user-dirs、決定できればユーザーのデスクトップへのパスを安全に提供するこのコードをまとめました。

import os, re
def get_desktop_path():

    D_paths = list()

    try:

        fs = open(os.sep.join((os.path.expanduser("~"), ".config", "user-dirs.dirs")),'r')
        data = fs.read()
        fs.close()
    except:
        data = ""

    D_paths = re.findall(r'XDG_DESKTOP_DIR=\"([^\"]*)', data)

    if len(D_paths) == 1:
        D_path = D_paths[0]
        D_path = re.sub(r'\$HOME', os.path.expanduser("~"), D_path)

    else:
        D_path = os.sep.join((os.path.expanduser("~"), 'Desktop'))

    if os.path.isdir(D_path):
        return D_path
    else:
        return None

ユーザーディレクトリを指定する必要があるファイルを解析しようとするだけで、失敗した場合は英語のデフォルトを使用しようとします。最後に、ディレクトリが存在することを確認します。正規表現はおそらく改善される可能性があることは認めますが、大丈夫だと思います。

于 2012-12-06T11:25:51.927 に答える