TL; DR - 利用os.getcwd()
あなたが任意のシンボリックリンクを解決し、物理パスへのシンボリックリンクを含むパスを回すためにos.path.realpath
を使用することができます。
~/src/stackoverflow $ mkdir targetdir
~/src/stackoverflow $ ln -s targetdir symlink
~/src/stackoverflow $ cd symlink
~/src/stackoverflow/symlink $
~/src/stackoverflow/symlink $ python
>>> import os
>>> import subprocess
>>> import shlex
>>>
>>> path = subprocess.check_output('pwd').strip()
>>> path
'/Users/lukasgraf/src/stackoverflow/symlink'
>>> os.path.realpath(path)
'/Users/lukasgraf/src/stackoverflow/targetdir'
もありますこれを実施するpwd
コマンドへの-P
オプション。 (OS X上)pwd
manページから
:
PWDユーティリティは標準出力に現在の作業 ディレクトリの絶対パス名を書き込みます。
シェルによっては、このユーティリティと同じまたは と同じ組み込みpwdコマンドを提供するものがあります。組み込み(1)マニュアルページを参照してください。
The options are as follows:
-L Display the logical current working directory.
-P Display the physical current working directory (all symbolic
links resolved).
If no options are specified, the -L option is assumed.
だから、これはあまりにも動作します:
>>> subprocess.check_output(shlex.split('pwd -P'))
'/Users/lukasgraf/src/stackoverflow/targetdir\n'
>>>
をしかし、最良のオプションは、Pythonの標準ライブラリからos.getcwd()
を使用することです:
>>> os.getcwd()
'/Users/lukasgraf/src/stackoverflow/targetdir'
それは明示的ではありませんそれは既にあなたのためのシンボリックリンクを解決しているようです。いずれにしても、現在の作業ディレクトリを取得するような、標準ライブラリが既に用意しているものに対しては、(subprocess
を使用して)砲撃することを避けたいでしょう。
'os.getcwd()'を試しましたか? – Frodon
@Frodon 私はそれを試しました。結果は 'subprocess.check_output([" pwd "])'と同じです。 –
'os.environ ['PWD']'はどうですか? – Frodon