feat: 修改以支持单实例
This commit is contained in:
parent
a01c16982a
commit
58b62dd090
|
@ -13,16 +13,14 @@ from flask import Flask, request, jsonify
|
||||||
from PyPDF2 import PdfWriter, PdfReader
|
from PyPDF2 import PdfWriter, PdfReader
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
import os
|
|
||||||
import pystray
|
import pystray
|
||||||
import threading
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from pystray import MenuItem
|
from pystray import MenuItem
|
||||||
# import requests
|
# import requests
|
||||||
import socket
|
import socket
|
||||||
import logging
|
import logging
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
CUR_DIR = os.path.dirname(os.path.abspath(__file__))
|
CUR_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
@ -53,14 +51,12 @@ CORS(app, supports_credentials=True)
|
||||||
app.json.ensure_ascii = False
|
app.json.ensure_ascii = False
|
||||||
|
|
||||||
|
|
||||||
class SnPost:
|
class MyPrint:
|
||||||
|
|
||||||
def __init__(self, server, port) -> None:
|
def __init__(self) -> None:
|
||||||
self.is_one_instance = False
|
self.is_one_instance = False
|
||||||
self.is_working = False
|
self.is_working = False
|
||||||
self.icon = None # 下标
|
self.icon = None # 下标
|
||||||
self.server = server
|
|
||||||
self.port = port
|
|
||||||
self.check_one_instance()
|
self.check_one_instance()
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +65,7 @@ class SnPost:
|
||||||
global s
|
global s
|
||||||
s = socket.socket()
|
s = socket.socket()
|
||||||
host = socket.gethostname()
|
host = socket.gethostname()
|
||||||
s.bind((host, 8080))
|
s.bind((host, 20309))
|
||||||
self.is_one_instance = True
|
self.is_one_instance = True
|
||||||
except Exception:
|
except Exception:
|
||||||
self.is_one_instance = False
|
self.is_one_instance = False
|
||||||
|
@ -77,6 +73,8 @@ class SnPost:
|
||||||
def close(self):
|
def close(self):
|
||||||
self.is_working = False
|
self.is_working = False
|
||||||
self.icon.stop()
|
self.icon.stop()
|
||||||
|
logger.info("程序退出")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
def log(self):
|
def log(self):
|
||||||
os.system(log_command)
|
os.system(log_command)
|
||||||
|
@ -84,13 +82,14 @@ class SnPost:
|
||||||
def run(self):
|
def run(self):
|
||||||
if not self.is_one_instance:
|
if not self.is_one_instance:
|
||||||
return
|
return
|
||||||
|
menu = (MenuItem('查看日志', self.log))
|
||||||
menu = (MenuItem('退出', self.close), MenuItem('查看日志', self.log))
|
|
||||||
image = Image.open("001.ico")
|
image = Image.open("001.ico")
|
||||||
title = "打印机"
|
title = "打印机"
|
||||||
self.icon = pystray.Icon(title, image, "打印机", menu)
|
self.icon = pystray.Icon(title, image, "打印机", menu)
|
||||||
threading.Thread(target=self.icon.run, daemon=True).start()
|
threading.Thread(target=self.icon.run, daemon=True).start()
|
||||||
|
|
||||||
|
app.run(port=8080, debug=False, host='0.0.0.0')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/print/', methods=['POST', 'OPTIONS'])
|
@app.route('/print/', methods=['POST', 'OPTIONS'])
|
||||||
def pdf_printer():
|
def pdf_printer():
|
||||||
|
@ -109,7 +108,7 @@ def pdf_printer():
|
||||||
win32print.OpenPrinter(printer_name)
|
win32print.OpenPrinter(printer_name)
|
||||||
win32print.SetDefaultPrinter(printer_name)
|
win32print.SetDefaultPrinter(printer_name)
|
||||||
else:
|
else:
|
||||||
return jsonify({"error_message": "打印机名称不正确","error_code": "printer_name_error"}), 400
|
return jsonify({"err_msg": "打印机名称不正确","err_code": "printer_name_error"}), 400
|
||||||
|
|
||||||
win32api.ShellExecute(
|
win32api.ShellExecute(
|
||||||
0,
|
0,
|
||||||
|
@ -119,11 +118,10 @@ def pdf_printer():
|
||||||
".",
|
".",
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
logger.info("打印成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
import traceback
|
logger.error(f"打印失败: {e}")
|
||||||
logger.error(traceback.format_exc())
|
return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500
|
||||||
print(traceback.format_exc())
|
|
||||||
return jsonify({"error_message": str(e), "error_code": "print_failed"}), 500
|
|
||||||
finally:
|
finally:
|
||||||
t = threading.Thread(target=del_file, args=(temp_pdf_path,))
|
t = threading.Thread(target=del_file, args=(temp_pdf_path,))
|
||||||
t.start()
|
t.start()
|
||||||
|
@ -149,12 +147,11 @@ def str_printer():
|
||||||
print_commands = request.json.get('printer_commands', None)
|
print_commands = request.json.get('printer_commands', None)
|
||||||
print_name = request.json.get('printer_name', None)
|
print_name = request.json.get('printer_name', None)
|
||||||
tsclibrary = ctypes.WinDLL(".//TSCLIB.dll")
|
tsclibrary = ctypes.WinDLL(".//TSCLIB.dll")
|
||||||
if print_name:
|
try:
|
||||||
logger.info("打印机名称: %s", print_name)
|
|
||||||
tsclibrary.openportW(print_name)
|
tsclibrary.openportW(print_name)
|
||||||
else:
|
except Exception as e:
|
||||||
logger.error("打印机名称无效")
|
logger.error(f"打印机名称无效: {e}")
|
||||||
return jsonify({"error_message": "打印机名称无线","error_code": "printer_name_error"}), 400
|
return jsonify({"err_msg": "打印机名称无效","err_code": "printer_name_error"}), 400
|
||||||
tsclibrary.clearbuffer()
|
tsclibrary.clearbuffer()
|
||||||
try:
|
try:
|
||||||
for item in print_commands:
|
for item in print_commands:
|
||||||
|
@ -172,14 +169,13 @@ def str_printer():
|
||||||
else:
|
else:
|
||||||
tsclibrary.sendcommandW(item)
|
tsclibrary.sendcommandW(item)
|
||||||
tsclibrary.closeport()
|
tsclibrary.closeport()
|
||||||
|
logger.info("打印成功")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
logger.error(f"打印失败: {e}")
|
||||||
logger.error("打印错误: %s", str(e))
|
return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500
|
||||||
|
|
||||||
return jsonify({}), 200
|
return jsonify({}), 200
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
obj = SnPost(server='localhost', port=8080)
|
MyPrint().run()
|
||||||
obj.run()
|
|
||||||
app.run(port=8080, debug=True, host='0.0.0.0')
|
|
||||||
|
|
Loading…
Reference in New Issue