2016-08-01 6 views
3

私は奇妙な問題に苦しんでいます。私はPHPを介してページからアクセスし、約20の変数を持つJSONオブジェクトを返すPythonスクリプトを持っています。常に空の値を返すものを除いて、すべての時間は常に動作します。サーバー上で直接Pythonスクリプトを実行すると、毎回値が返されますが、PHPは決してそれを見ません。私は文字列として、intとして、そしてプリセット値と組み合わせた文字列として出力を試みました。投稿されたコードは2つしか示されていませんが、ほとんどの機能値は長さのために省略されています。 ( "CPUL" は、一方が動作していない。)PythonからPHPへのJSON値の損失?

PythonScript.py:SSH端末から

#!/usr/bin/python2.7 

import os, json 

def getCPUtemperature(): 
    res = os.popen('vcgencmd measure_temp').readline() 
    tmp = (1.8 * float(res.replace("temp=","").replace("'C\n",""))) + 32 
return(tmp) 

# Return % of CPU used by user as a character string 
def getCPUuse(): 
    val = str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip(\ 
    )[2:4]) 
    return(val) 

result = {'cput': CPU_temp, 'cpul': CPU_usage} 
print json.dumps(result) 

OUTPUT:{ "CPUL": "9"、 "cput":106.16000000000001}

ブラウザから

<?php 
session_start(); 
try { 
    $result = exec('/usr/bin/python /scripts/PyhtonScript.py'); 
    echo $result; 
} catch (Exception $e) { 
    echo '{"res" : "ERROR", "msg" : "Caught exception: ' . $e->getMessage() . '"}'; 
} 
?> 

OUTPUT:phpScript.phpだけブラウザ上に結果を渡す{ "CPUL": ""、 "cput":106.16000000000001}

私が言うことをPythonScript.py '結果' を変更する場合:ブラウザから

result = {'cput': CPU_temp, 'cpul': 'foo'} 

OUTPUT:{ "CPUL": "foo" という、 "cput":106.16000000000001}

を、私はPythonScriptを変更した場合。ブラウザから

result = {'cput': CPU_temp, 'cpul': 'foo' + CPU_usage} 

OUTPUT::{ "CPUL": "foo" という、 "cput":106.16000000000001}

を私は出力にint型ではなく、STRIを機能を変更する場合言うことPY '結果' SSHターミナルから

OUTPUT::{ "CPUL":9、 "cput":106.16000000000001}ブラウザから

OUTPUT:{ "CPUL": ""、「cput ngの私は、引用符なしで同じ結果を得ます「:106.16000000000001}

値はパーセンテージであるので、私は送信する前に100を掛けするのが大好きだが、私はとしての機能を変更した場合:SSH端末から

def getCPUuse(): 
val = str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip(\ 
)) 
mod = int(val) * 100 
return(mod) 

OUTPUT:{」CPUL」 :90、 "cput":106.16000000000001}

ブラウザから

OUTPUT:何も、空白の画面

のapache2/error.logファイル:

Traceback (most recent call last): 
    File "/var/www/html/assets/scripts/info_lkp.py", line 49, in <module> 
    CPU_usage = getCPUuse() 
    File "/var/www/html/assets/scripts/info_lkp.py", line 29, in getCPUuse 
    mod2 = int(mod)*10 
ValueError: invalid literal for int() with base 10: '' 
'unknown': I need something more specific. 

私が引き出すために、髪を使い果たす前に、私が行方不明です何を任意のアイデア?前述のように、ポストされたコードは切り捨てられ、無関係に動作している同様の機能と関連する出力が削除されます。

答えて

0

これはPythonのエラー

あなたはPythonスクリプトで、それを送信する前に100を掛けた場合、エラーが起きています。

値が失われています。まあ、PHPのためではありません。 これは、Pythonスクリプトが有効なJSONを返さないためです。私は、ログがそれを言っていることを理解しValueError: invalid literal for int() with base 10: ''

+0

ここでこのエラーについて

読む..私は理解していない何が./PythonScript.pyを実行すると、SSH端子を介して値の罰金を返す理由ですが、通過していないときPHPスクリプト。このエラーは、コマンドラインからの値 "9"がphpを通じて存在しないことを示しています。 – Chris

+0

これはあなたのpythonのスクリプトロジックの問題です。あなたがシェルを介してPythonスクリプトを実行するとき、それは1人のユーザから実行されることを理解したいと考えています。 PHPスクリプトからpythonnスクリプトを実行すると、Webプロセスユーザーが使用されます。これはあなたのケースの結果に多分影響するかもしれません。とにかく、私たちはあなたのお手伝いをすることはできません。 –

+0

私はそれを理解しています。私はもともとそれが許可の問題かもしれないと思ったが、CPUのtemp関数は同じコマンドであり、出力は異なって解析されていた。それがうまくいくならば、許可はそこにあるべきです、そうですか?出力がユーザーごとに違うとは思いませんか?私は完全なコンテンツを出力し、何が起こるかを見ようとします。 – Chris

関連する問題