4

使ってます:

  • Windows XP
  • Python 2.6.2(python.orgからの標準インストール)
  • gitバージョン1.6.5.1-preview20091022(http://code.google.com/p/msysgit/からインストール)

絶対パス()のように見える環境変数がありますが、/path/to/dirそれを使用してgitURLを作成しています。ある時点で、に変換されC:/Program Files/Git/path/to/dirます。Pythonに問題があるようです:

git bashシェルの場合:

$ export VAR=/path/to/dir
$ echo $VAR
/path/to/dir
$ python
>>> import os
>>> os.environ['VAR']
'C:/Program Files/Git/path/to/dir'

git bashはパスを変換していませんが、Pythonは変換していますか?

Windowsコマンドプロンプトでは、Pythonはそれを正しく理解します。

C:\>set VAR=/path/to/dir
C:\>echo %VAR%
/path/to/dir

C:\>python
>>> import os
>>> os.environ['VAR']
'/path/to/dir'

誰かがここで何が起こっているのか説明できますか?そして、どうすればbashシェルでの変換を防ぐことができますか?

編集:私のPythonスクリプトはOS XとWindowsで実行されることを追加する必要があります。したがって、誰かが解決策を持っている場合は、両方のプラットフォームで作業するとよいでしょう。

4

3 に答える 3

2

問題は間違いなくMSYSが原因のように聞こえます。MSYSプロセスが非MSYSプロセス(たとえば、ネイティブWindowsPythonを呼び出すmsysgitbashシェル)を実行すると、引数は絶対POSIXパスのように見えるもの(たとえば、単一の「/」で始まるもの)がないかチェックされます。非MSYSプログラムがそれらを見つけることができるように、基礎となる「実際の」Windowsパスに変換されます。同じ理由で、これと同じプロセスが環境変数の内容にも発生する可能性があります。

これが、先頭の「/」を削除すると機能し(値はPOSIXパスのようには見えなくなります)、追加の「/」が機能する理由(同上)、Cygwinで正常に機能する理由(MSYSではない)です。また、msysgitを「C:\ ProgramFiles \ Git」にインストールしたと推測しています。これが、MSYSが「偽の」POSIXファイル階層がそこにルートされていると見なし、「/ path /to/」の前に追加する理由です。あなたのためのdir'。

残念ながら、それが説明である場合、明確な解決策はありません。http://comments.gmane.org/gmane.comp.gnu.mingw.msys/での議論によると、sshを介してリモートパスを通過させようとして同様の問題が発生しましたが、これを回避するための適切な方法は見つかりませんでした。4511(2008年から)これまでに見つけた回避策以外に明らかな修正はありません。これが大きな問題になる場合は、MinGW-MSYSメーリングリストまたはバグトラッカーで問題を提起することをお勧めします。Gmaneの議論によると、既知の問題であるにもかかわらず、正式に報告されたことはありませんでした。

于 2011-03-10T13:28:54.003 に答える
1

私の推測では、これはPythonのせいではなく、gitbashシェルです。
変数を見ると、gitbashシェルが嘘をついているのかもしれません。
または、最初の/を配置せず、後で再度追加するようにしてください(変換が行われない場合)。

cygwinを試してみると、次のように機能します。

$ export test="/bin"
$ python
>>> import os
>>> os.environ["test"]
'/bin'
于 2009-11-20T23:27:34.197 に答える
1

msysgitから取得するコンソールは、おそらくgitユーザーのニーズに合わせて変更されています。私のPOVからは、単純なタスクにのみ役立ち、Pythonスクリプトを開発および実行しないようにgitコマンドラインにアクセスします(シェルでWindows用のPythonインストールを使用しています)特定のアプリケーション用にインストールされていますが、それは良くありません)。

Cygwinと彼のpythonパッケージ(および必要に応じてgitパッケージ)をインストールして、バイナリとライブラリが準備された正しいPOSIX環境を取得する必要があります。

于 2009-12-23T06:44:51.160 に答える