私はOS Xを使用しており、インタプリタへのインタフェースを作成しようとしています。インタプリタとの通信はPHPで次のようになります。
$f = fopen('mmascript.m', 'w');
fwrite($f, "#!/Applications/mma/Contents/MacOS/MathematicaScript -script\n");
fwrite($f, 'Print[100]');
fclose($f);
chmod('mmascript.m', 0777);
passthru('mmascript.m', $error);
echo $error;
エラー 127、「コマンドが見つかりません」と表示されます。フォルダにCDを挿入してファイルを実行しようとするとエラーが発生します。
無効な通訳者:操作は許可されていません。
別のフォルダfeにコピーすると、cp ./mmascript.m ~/Desktop/mmascript.m
最初は同じ問題が発生する可能性がありますが、魔法のように動作し始めます。インタプリタへのパスは絶対パスであるため、パスが正しいことを意味します。どんなアイデアがありますか?
答え1
次のようにいくつかのデバッグ情報を追加しましょう。
$f = fopen('mmascript.m', 'w');
echo "fopen complete."
fwrite($f, "#!/Applications/mma/Contents/MacOS/MathematicaScript -script\n");
echo "fwrite 1 complete."
fwrite($f, 'Print[100]');
echo "fwrite 2 complete.
fclose($f);
echo "close complete."
chmod('mmascript.m', 0777);
echo "Permissions Successfully Changed."
passthru('mmascript.m', $error);
echo "Passthru Complete."
echo $error;
私の直感は、パススルーがコマンドの後にファイル名が来ることを期待しているので、パススルーがそれを反映していないことです。