6

私は次のコードを持っています:

os.chdir(os.path.dirname(os.path.realpath(__file__)) + "/../test")
path.append(os.getcwd())
os.chdir(os.path.dirname(os.path.realpath(__file__)))

これはpythonパスに追加/../testする必要があり、そうします。その後、PyDevを使用してEclipseですべてスムーズに実行されます。

しかし、コンソール2番目のos.chdirから同じアプリを起動すると、実際には間違ったことが発生し、代わりにos.path.realpath(__file__)返されます。もちろん、固定を使用してこれを修正できますが、それは少し間違っているように思えますが、これはEclipseとコンソールの両方で機能します。../test/myFile.py../originalFolder/myFile.pyos.chdir("../originalFolder")

PSos.getcwd()そのようなフォルダーがまだ追加されていないことを確認したいので、実際に使用しています。そうしないと、ディレクトリをまったく切り替える必要がありません

それで、私のアプローチに何か問題がありますか、それとも私は何かを台無しにしましたか? または何?:)

前もって感謝します!:)

4

1 に答える 1

8

の値を見てください__file__。スクリプトへの絶対パスは含まれていません。コマンドラインからの値であるため、「。/myFile.py」や「myFile.py」のようになります。また、realpath()はパスを絶対パスにしないため、別のディレクトリで呼び出されたrealpath( "myFile.py")は引き続き"myFile.py"を返します。

私はあなたがこのような何かをすべきだと思います:

import os.path

script_dir = os.path.dirname(os.path.abspath(__file__))
target_dir = os.path.join(script_dir, '..', 'test')
print(os.getcwd())
os.chdir(target_dir)
print(os.getcwd())
os.chdir(script_dir)
print(os.getcwd())

私のコンピューター(Windows)では、次のような結果が得られます。

e:\parser>c:\Python27\python.exe .\rp.py
e:\parser
e:\test
e:\parser

e:\parser>c:\Python27\python.exe ..\parser\rp.py
e:\parser
e:\test
e:\parser

注:互換性を重視する場合(奇妙なパスエラーは気に入らない場合)、パスを組み合わせるときは常にos.path.join()を使用する必要があります。

注:私のソリューションは非常に単純です(絶対パスを覚えておいてください)が、最も単純なソリューションが最適な場合もあります。

于 2012-03-27T10:52:47.073 に答える