1

phpから別のファイルを実行する際に問題が発生しました。php paramsを、別のファイル自体を呼び出すpythonファイルを実行した結果にしたいと思います。

これが私のphpファイルです:

<?php
    if (isset($_POST['submit'])) {
    $params = solve();
}

function solve() {
  exec("python array.py", $output);
  return $output;
}
?>

array.pyが単純な場合:

if __name__ == "__main__":
    print 1
    print 2
    print 3
    print 4

出力として1、2、3、4を取得しますが、array.pyをos.systemを呼び出す次のファイルに変更すると、何も取得されません。したがって、新しいarray.pyは次のようになります。

import os

def main():
    os.system("python test.py") #test.py creates tmp.txt with 4 lines w/ values 1,2,3,4


def output():
    f = open("tmp.txt", "r")
    myReturn = []
    currentline = f.readline()

    while currentline:
          val = currentline[:-1]  #Getting rid of '\n'
          val = int(val)
          myReturn = myReturn + [val]
          currentline = f.readline()
    f.close()
    return myReturn


if __name__ == "__main__":
     main()
     o = output()
     print o[0]
     print o[1]
     print o[2]
     print o[3]

また、test.pyを実行しただけの場合、出力はファイルtmp.txtです。

 1
 2
 3
 4

そのため、phpファイルを実行すると、出力tmp.txtがディレクトリに作成されないため、phpからも出力が得られません。array.pyを自分で実行すると、目的の出力が得られ、tmpファイルが作成されるため、なぜこれが発生するのかわかりません。

編集:私は含めるのを忘れました:上記のOSをインポートします。

4

1 に答える 1

4

execを次のように変更します。

exec("python array.py 2>&1", $output)

または、WebサーバーまたはPHPエラーログを確認してください。これにより、Pythonスクリプトからphpスクリプトにエラー出力が返されます(通常、本番環境で必要なものではありません)。

于 2012-09-27T14:40:15.300 に答える