10

次の名前のパスがあるとします。

/this/is/a/real/path

ここで、シンボリック リンクを作成します。

/this/is/a/link  -> /this/is/a/real/path

次に、ファイルを次のパスに配置します。

/this/is/a/real/path/file.txt

そしてシンボリックパス名でそれをcdします:

cd /this/is/a/link

これで、pwd コマンドはリンク名を返します。

> pwd
/this/is/a/link

そして今、file.txtの絶対パスを次のように取得したい:

/this/is/a/link/file.txt

しかし、python のos.abspath()oros.realpath()では、それらはすべて実際のパス ( /this/is/a/real/path/file.txt) を返しますが、これは私が望むものではありません。

subprocess.Popen('pwd')とも試しsh.pwd()ましたが、シンボリックリンクパスの代わりに実際のパスも取得します。

Pythonでシンボリック絶対パスを取得するにはどうすればよいですか?

アップデート

OK、ソースコードを読んだpwdので答えが出ました。

それは非常に簡単です:PWD環境変数を取得するだけです。

これは私のabspath要件を満たすためのものです:

def abspath(p):
    curr_path = os.environ['PWD']
    return os.path.normpath(os.path.join(curr_path, p))
4

3 に答える 3

-1

Python 2.7.3 ドキュメントから:

os.path.abspath(パス)¶

Return a normalized absolutized version of the pathname path. On most platforms, this is equivalent to normpath(join(os.getcwd(), path)).

os.getcwd() は実際のパスを返します。例えば

/home/user$ mkdir test
/home/user$ cd test
/home/user/test$ mkdir real
/home/user/test$ ln -s real link
/home/user/test$ cd link
/home/user/test/link$ python

  >>> import os
  >>> os.getcwd()
  '/home/user/test/real'
  >>> os.path.abspath("file")
  '/home/user/test/real/file'
  >>> os.path.abspath("../link/file")
  '/home/user/test/link/file'

また

/home/user/test/link$ cd ..
/home/user/test$ python

  >>> import os
  >>> os.path.abspath("link/file")
  '/home/user/test/link/file'
于 2013-07-23T09:54:50.560 に答える