2017-06-13 19 views
0

私はpythonスクリプトを持っています。コマンドラインから次のようにスクリプトを実行すると、PHPからPythonに変数を渡す

python upgrade.py arg1 arg2 

スクリプトは正常に実行されます。 は今、私は使用してPHPのコードを経由して同じ変数を渡すしようとしています:

passthru("python upgrade_device.py $arg1 $arg2"); 

スクリプトが実行されません。

sys.argv 

引数が 正しく渡され、私はこれが実行に失敗した特定のコマンドで印刷

を使用してテストしています:

child=pexpect.spawn('ssh [email protected]%s'%ip_addr) 

IP_ADDRのいずれかである は、私が使用して引数を受け入れています引数はPHPから渡されます。このコマンドのすぐ下に、私はip_addrを使って、どの値がコマンドに渡されるのかを調べます。値は期待通りです。

ip_addr変数が正しく格納されています。 私は文字列に型をキャストしているので、問題ではないはずです。一般的に

、コマンドラインから変数を渡すと、私はシェルを通すと思うとPHPが同じである私の理解のためにPHP

+0

PHPでセーフモードが有効になっていますか? 'php -i | grep safe_mode' – sjdaws

+0

@sjdaws安全モードがオフです – john

答えて

0

から渡すにおける形式の違いがある、私はのために確認することはできません100%ですが、私は経験から知っていることです。

の場合は、が入力されているかどうかを確認してください(正しく動作すれば出力を取り出し、それを端末でテストすることを意味します)。 と同じディレクトリ、が現在のPHPスクリプトパスで開かれるためです。そして、シェルコマンドはそれを尊重する必要があります。たとえば、「/」、およびPythonスクリプトファイルを使用すると、たとえば「のpython myPyScript.py 646545645」のようなものを実行して「/ myPythonScripts/imageProccessing /」、であるPHPスクリプトファイルがルートにあると仮定しましょうこの例ではPHPのを実行する必要があります。 "python ./myPythonScripts/imageProcessing/myPyScript.py 646545645"、私はシェルがPHPスクリプトパス上で起動されたと言っています。

今それは問題ではない場合は、escapeshellcmd()で、最初の文字列をエスケープを試してみてください。それが何を与えるかを見てください。 シェルによってサポートされていない文字、または特定の意味を持ち、シェルによって構文解析された文字が別様にです。彼らのどれも引数として渡されていないことを確認してください。

上記のいずれにも該当しない場合は、代わりにexecshell()を使用してください。あまりにも可能性がありますが違いを生むことはありません。

編集:ケース何では、それがJSON https://stackoverflow.com/a/14048046/7668448を使用して、この応答で行うの道をやり取りする方法が行われているだけのビットを変更し、使用するようにしてください、助け

(それはより便利のようなものです)

問題を解決したものがあれば、それが正確であったかどうかを確認してください。私はそれが助けてくれることを願うまた、それがあなたのケースでない場合、将来的に他の人にとって有用かもしれません。あなたがするときに解決策を与えることについても考えてみてください! (私も個人的にも興味があります)

関連する問題