python CGI
前端调用python CGI并传值(可以直接将.py文件重命名为.cgi)
layui.use('form', function () {
var form = layui.form;
// 关闭异步加载
$.ajaxSettings.async = false;
// 调用cgi以及向后端传递参数
$.get("./GetName.cgi", "text=" + text + "&JobName=" + JobNam, function(strResult){
// strResult,获取从后端传回的数据
console.log(strResult)
}).fail(function(){
layer.msg('错误','请求超时,服务器无响应!');
})
});
python CGI 样例
#!/usr/bin/env python3
# ------------------------- encoding: utf-8 ---------------------------
#
# author:
# software:
# file: ***.cgi
# time: 2020/8/4 17:30
#
# ---------------------------------------------------------------------
import os
import cgi
import json
import logging
import codecs
import sys
import time
import datetime
import subprocess
# python3若有中文输出需添加 import codecs, import sys 及如下语句
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
def GetName(JbNam):
try:
# 获取自身名称
Name = sys.argv[0]
# 获取当前时间
time_now = time.strftime('%Y/%m/%d %H:%M:%S')
# python3若需要读写 中文 文件需加入 encoding='utf8'
MyLog = open('./MyLog.txt', 'a', encoding='utf8')
# python使用shell命令
os.system("ls") # 返回执行结果的状态
subprocess.getoutput("ls -lrt") # 返回执行结果
# python获取自身pid
pid = os.getpid()
# print的内容会发送到前端strResult
print(JbNam)
except TypeError as o_err:
logging.error("%s[%d]: %s" %
(__file__, o_err.__traceback__.tb_lineno, o_err))
except Exception as o_err:
logging.error("%s[%d]: %s" %
(__file__, o_err.__traceback__.tb_lineno, o_err))
pass
# 格式化,这句代码就能将Python的输出通过cgi传给前端,要注意,Python只能有一个输出,多了前端无法识别,
# 也就是Python每次被调用只能有一个print()被调用
print("Content-type:text/html\n")
# 创建 FieldStorage 的实例化,获取前端数据
# 这里实例化一个对象,通过o_form来获取前端传过来的参数.
o_form = cgi.FieldStorage()
# 使用getvalue()这个方法获取前端穿的参数值,这里的'text'和'JobName'是前端值对应的key,通过key拿对应的参数值
JobName = str(o_form.getvalue('JobName'))
GetName(JobName)
python连接redis
1.pip安装redis
1.1默认安装
pip install redis
1.2安装python2版本
python2 -m pip install redis (或者 pip2 install redis)
1.3安装python3版本
python3 -m pip install redis (或者 pip3 install redis)
2.python操作redis:
import redis
redis_link = redis.Redis(host = '127.0.0.1',port = 6379,db = 0)
redis_link.set('name','Delia')
Text = reids_link.get('name')
print (Text)
import redis时报错
可能原因:存在自己创建的redis.py程序(删除它)
python连接clickhouse
1.pip安装clickhouse
1.1默认安装
pip install clickhouse-driver
1.2安装python2版本
python2 -m pip install clickhouse-driver (或者 pip2 install clickhouse-driver)
1.3安装python3版本
python3 -m pip install clickhouse-driver (或者 pip3 install clickhouse-driver)
2.python操作clickhouse:
from clickhouse_driver import Client
# 没有的项可以省略,如uesr,password
client = Client(host = '127.0.0.1',port = '9000',user = "user",database = "database", password = "pwd")
sql = 'select * from db_name.tb_name limit 0, 1000'
ans = client.execute(sql)
print(ans)
python连接sqlite3
1.安装sqlite3
# 判断是否有sqlite3,终端输入:
sqlite3
# 安装sqlite3
下载地址:https://www.sqlite.org/download.html
tar xvzf sqlite-autoconf-3071502.tar.gz
cd sqlite-autoconf-3071502
./configure --prefix=/usr/local
make
make install
2.创建表
#!/usr/bin/env python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('''CREATE TABLE TransactionCode
(Id INT ,
NAME TEXT PRIMARY KEY,
ProtocolName TEXT,
Location TEXT,
QRType TEXT,
Status TEXT
);''')
print ("Table create successfully")
conn.commit()
conn.close()
3.插入数据
#!/usr/bin/env python3
# coding=utf-8
import sqlite3
conn = sqlite3.connect("test.db")
c = conn.cursor()
c.execute("INSERT INTO TransactionCode (Id,NAME,ProtocolName,Location,\
QRType,Status) VALUES (1,'AAAAA','协议1','../server/1.txt','Q','1')")
c.execute("INSERT INTO TransactionCode (Id,NAME,ProtocolName,Location,\
QRType,Status) VALUES (2,'BBBBB','协议2','../server/2.txt','Q','2')")
c.execute("INSERT INTO TransactionCode (Id,NAME,ProtocolName,Location,\
QRType,Status) VALUES (3,'CCCCC','协议3','../server/3.txt','Q','3')")
conn.commit()
conn.close()
print ("successfully")
4.搜索数据
#!/usr/bin/env python3
# coding=utf-8
import sqlite3
conn = sqlite3.connect("test.db")
c = conn.cursor()
result = c.execute("select Id,NAME,ProtocolName,Location,QRType,Status from TransactionCode")
print(result.fetchall())
conn.close()
5.更新数据
#!/usr/bin/env python3
# coding=utf-8
import sqlite3
conn = sqlite3.connect("test.db")
c = conn.cursor()
c.execute("UPDATE TransactionCode set NAME = 'DDDDD' where ProtocolName = '协议1'")
conn.commit()
print("successfully")
conn.close()
6.删除数据
#!/usr/bin/env python3
# coding=utf-8
import sqlite3
conn = sqlite3.connect("test.db")
c = conn.cursor()
c.execute("DELETE from TransactionCode where Id = '1'")
conn.commit()
conn.close()
print("successflly")
python程序打包成可执行文件
1.安装pyinstaller
1.1默认安装
pip install pyinstaller
1.2安装python2版本
python2 -m pip install pyinstaller
1.3安装python3版本
python3 -m pip install pyinstaller
2.执行pyinstaller(目录dist下会生成可执行文件,将生成的文件添加.cgi后缀)
pyinstaller -F 路径/程序名
python程序打包成可执行文件后,前端调用CGI文件时http报错500的解决办法
## pyinstaller版本回退3.5
pip install –upgrade pyinstaller==3.5
python2 -m pip install –upgrade pyinstaller==3.5
python3 -m pip install –upgrade pyinstaller==3.5
## 系统版本适用:ubuntu 16.4, 18.4 若3.5版本的pyinstaller打包失败,可尝试升级或者降级pyinstaller

浙公网安备 33010602011771号