CGIとは 


ざっくりいうと…

JavaScriptから「Pythonなどのプログラム」を実行できるしくみです.

JavaScriptとプログラム間で,値の受け渡しもできます.

(研究室のサーバで動かすときは,ちょっと手こずるので,
注意してください.)

やりかた 


2つの値をプログラムに送り,プログラム内でそれらを足し,それを返す
JavaScriptとPythonの例です.


/main.js


async function execute(l, r) {

const url = "./cgi-bin/program.py";
// プログラムの相対パス
//(プログラムは「/cgi-bin」下にいれるのが定石です)

const data = {
"left": l,
"right": r,
};
// プログラムに送りたい値を,連想配列で書きます

const request = {
"method": "POST",
"headers": {"Content-Type": "application/json", "charset":"utf-8"},
"body": JSON.stringify(data),
};

const responce = await fetch(url, request);
// ここでプログラムを実行させます
//「responce」には,プログラムからやってきたデータなどが入ります

const receivedData = await responce.json();
// プログラムからやってきたデータを,使いやすいように連想配列に変換します

return receivedData["result"];

};

async function main() {

const result = await execute(3, 5);
console.log(result)
// >> 8

};

main();



/cgi-bin/program.py


#!C:\Users\ユーザ名\AppData\Local\Programs\Python\Python38\python.exe
# coding: utf-8

# 1行目で,「#!」に続けて,Pythonのインタプリタを指定します

import sys
import io
import json

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding = "utf-8")
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = "utf-8")
# 日本語(2バイト文字)をふくむデータを送受信するときに
# 文字化けしないようにするためのおまじない

received_data = json.loads(sys.stdin.readline())
# 「received_data」に,JavaScriptからやってきたデータが,辞書形式で入ります

left = received_data["left"]
right = received_data["right"]
# 個々の値を使うときは,こういうふうにします

result = left + right

send_data = {
"result": result
}
# JavaScriptに送りたいデータを,辞書形式で書きます

print("Content-type: text/html; charset=utf-8\r\n")
print(json.dumps(send_data))
# JavaScriptにデータを送ります

exit()



サーバでやるときの注意点! 



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS