-1

Python の subprocess モジュールを使用して php スクリプトを実行しようとしています。

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

retCode = proc.wait

print retCode

val = float(kprocess.stdout.read())

return val

私も試しました:

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

val = float(kprocess.communicate()[0])

return val

どちらの方法も、Python インタープリターで実行するとローカルで機能しますが、実際のサーバーで実行しようとすると、常に「ValueError at / empty string for float()」が発生します。これは、プロセスがどういうわけか待たされていないと私に信じさせます. 私は何が欠けていますか?

編集: Django を使用しているため、Django で実行した場合にのみ壊れるようです。

4

1 に答える 1

5

実際にプロセスのwait関数を呼び出す必要があります。

proc = subprocess.Popen(...)
retCode = proc.wait # retCode will be the function wait
retCode = proc.wait() # retCode will be the return code

waitただし、出力をリダイレクトしているため、ドキュメントの警告に注意してcommunicate代わりに使用する必要があります。コードに構文エラーがないことを確認してください。

  • test.phpおそらく変数名ではなく、文字列です
  • proc2 つの変数名を混同しています。kprocess
  • あなたはやみくもに結果を解析していますcommunicate(これは厳密にはエラーではありませんが、エラーの検出と追跡を妨げる可能性があります)

代わりに、次のことをお勧めします。

proc = subprocess.Popen(['php', '-f', 'test.php'],
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout,stderr = proc.communicate()
if proc.returncode != 0:
    raise Exception('Test error: ' + stderr)
return float(stdout)
于 2011-06-16T20:53:59.697 に答える