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
posted @ 2020-08-16 20:06  孤独的火柴人  阅读(524)  评论(0)    收藏  举报