2

これは私の最初の質問です。

私の python スクリプトは、次の単純な機能を使用して、現在のテキスト ファイルを開いて読み取ります。

open("config.ini", "r")

これは相対パスであるため、スクリプトが起動されたときと同じディレクトリにconfig.iniが配置されているため、動作するはずです。これは現在の作業ディレクトリである必要があります。

実際、これは私の 3 つの Linux ボックスすべてで完全に機能しますが、config.ini を開くときにエラーが発生するため、サポートを要求するユーザーが 1 人います。エラーが発生する理由

os.path.exists("config.ini")

ファイルが存在する場合でも false を返します。

この問題を解決しようとして、作業ディレクトリが別の場所にあるにもかかわらず、config.ini を彼のホーム ディレクトリに配置することが唯一の方法であることがわかりました。

また、私のスクリプトが現在の作業ディレクトリにファイルを作成しようとすると、ファイルは常に代わりにホームディレクトリに作成されるため、何らかの理由で彼の作業ディレクトリは常にホームになっていると思います!

この問題のトラブルシューティング方法を教えてください。絶対パスを導入できるかもしれませんが、 os.getcwd() が正しいものではなくホームディレクトリを返すのではないかと心配しています。

このユーザーに何らかの方法でマシンを修正するよう提案する必要がありますか?

この長い質問で申し訳ありませんが、英語は私の第一言語ではなく、私はコーディングの初心者であるため、説明するのが難しい場合があります.

事前にどうもありがとうございました!=)

4

2 に答える 2

5

ユーザーが自分のホーム ディレクトリからスクリプトを実行している可能性はありますか?

つまり、スクリプトが次の場所にあるとします。

/home/user/test/foo/foo.py

しかし、ユーザーは次のように呼び出します。

/home/user> python test/foo/foo.py

この場合、スクリプトが認識する「現在のディレクトリ」は/home/user.

あなたができることは、この関数を呼び出すことによって、スクリプト自体が存在するディレクトリを見つけることです:

import os

def script_dir():
    return os.path.dirname(os.path.realpath(__file__))

異なる可能性がある現在のディレクトリではなく、スクリプトが存在するディレクトリを常に返します。その後、構成ファイルをそこに安全に保存できます。

于 2010-06-26T09:41:32.737 に答える
0

Eli Bendersky の提案と同じように、次のことを試してみてください。

os.path.exists(os.path.join(sys.path[0],"config.ini"))

なぜなら、sys.path[0]常にスクリプトが存在するディレクトリでなければならないからです。

于 2010-06-26T11:27:35.530 に答える