0

Windows Server 2008 で次の python スクリプトを使用しています。

import cgitb
import subprocess

cgitb.enable()
print "Content-Type: text/plain;charset=utf-8"
print

cmd = "git tag"
process = subprocess.Popen(cmd.split(), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
git_output = process.communicate()[0]
print "git output = %s" % git_output

実際、いくつかの git タグがあります。シェルを介してこのスクリプトを実行すると、完全に機能します。ただし、IIS (7) を実行すると、出力が空のように見えます。

Popen の出力を PIPE ではなくファイルに出力しようとしました。繰り返しますが、コマンド ラインから実行した場合は機能しましたが、IIS を介して実行した場合は機能しませんでした。

何か案は?

編集:

@Wooble のアドバイスに従って、[0] を通信の呼び出しから削除して git エラーを確認したところ、「'git' は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」という謎めいたエラーが見つかりました。もちろん、システムには git がインストールされています。前述したように、スクリプトはコマンド ラインから直接実行すると機能します。

無駄に、私は試しました:

  1. git 実行可能ファイルのフル パスを使用するようにコマンドを設定する
  2. git 実行可能ディレクトリのフル パスを python の sys.path に追加する
  3. 実際の git 実行可能ファイルを作業ディレクトリにコピーすると、「git が認識されませんでした」というエラーは解消されましたが、空の結果が得られました。

助けてください!!

4

1 に答える 1

0

IIS から実行しているときにパスが部分的だった理由はわかりませんが (説明を歓迎します!)、これを追加することで最終的に問題が解決しました:

git_path = "C:\\Program Files (x86)\\Git\\bin\\"
os.environ["PATH"} += git_path + ';'
于 2013-07-18T15:09:11.127 に答える