2016-08-18 2 views
0

私は次のスクリプトを実行するとPythonのサブプロセスpwdの矛盾したときに、ファイル構造は別名が含ま

#!/usr/bin/env python 
import subprocess 
print(subprocess.check_output(["pwd"])) 

結果が

/scratch1と/名/ Dropboxが(NAM)/ドキュメント/研究/ Y2 /結果/ S8

私のUbuntuの端末から、コマンド

ながら、 10の

利回り

/地震/ホーム/名前/ドキュメント/研究/ Y2 /結果/ S8

最初のパスの別名である

。なぜ彼らは矛盾しているのですか?

+0

'os.getcwd()'を試しましたか? – Frodon

+0

@Frodon 私はそれを試しました。結果は 'subprocess.check_output([" pwd "])'と同じです。 –

+0

'os.environ ['PWD']'はどうですか? – Frodon

答えて

1

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を使用して)砲撃することを避けたいでしょう。

+0

'os。論理的な現在の作業ディレクトリを取得するためにgetcwd() '(または別の標準ライブラリメソッド)を使用しますか? (つまり、 'pwd -L'をエミュレートします)。 –

+0

いいえ、 'os.getcwd()'はドキュメントからわかるように引数をとりません。 –

+0

も参照してください:[symlinkを参照解除しないos.getcwd()のバージョンはありますか?](http://stackoverflow.com/questions/1542803/is-there-a-version-of-os-getcwd- –

関連する問題