网站首页 > 教程文章 正文
背景
之前弄了个网络打印机服务器cups,是可以添加打印机然后发起打印的,而手机、电脑却又只支持在局域网内添加打印机,所以一旦我在外面的话,就无法利用家里的打印机打印了。
命令行打印
在之前安装了hplip之后,在命令行里就有了lpr命令,我们就可以用
lpr 文件名
进行打印。
或者,如果没指定默认打印机的话,可以加上 -P 参数
lpr -P 打印机名 文件名
进行打印。
制作上传文件网页,并打印
在有了命令行打印的触发方法之后,我们就可以编写一个用来上传文件的网页,并在成功上传后,调用lpr命令触发打印了。
上传文件的网页:
后台程序:
import os
import subprocess
import logging
from flask import Flask, render_template, request, Response, make_response
from gevent.pywsgi import WSGIServer
host = '::'
port = 6311
app = Flask(__name__, template_folder='site')
app.config['UPLOAD_FOLDER'] = 'site/upload/'
logging.getLogger().setLevel(logging.INFO)
fh = logging.FileHandler("log.log")
fh.setLevel(logging.INFO)
logging.getLogger().addHandler(fh)
@app.route('/')
def upload_root():
return upload_v1()
@app.route('/upload_v1')
def upload_v1():
return render_template('uploader.html')
@app.route('/uploader_v1', methods=['GET', 'POST'])
def uploader_v1():
if request.method == 'GET':
return render_template(r'upload_v1.html')
save_path = app.config['UPLOAD_FOLDER']
os.makedirs(save_path, exist_ok=True)
f = request.files['upload_file']
logging.info(request.files)
upload_file_path = os.path.join(save_path, f.filename)
f.save(upload_file_path)
logging.info(upload_file_path)
p = subprocess.Popen(f'sudo chmod 777 {upload_file_path}', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
logging.info(f"{p.stdout.readlines()}\n\n{p.wait()}")
p = subprocess.Popen(f'lpr -P HP_LaserJet_1020_usb {upload_file_path} -o media=a4', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
resp = f"{p.stdout.readlines()}\n\n{p.wait()}"
logging.info(resp)
return resp
if __name__ == '__main__':
# app.run(host='0.0.0.0', port=port, debug=True)
# app.run(host='::', port=port, debug=True)
server = WSGIServer((host, port), app)
print("Server started")
server.serve_forever()
在测试中发现,由于我的域名解析是ipv6地址,所以flask里的监听地址就不能设置成常用的 0.0.0.0 了,而是要设置为 :: 。
中文
但尝试打印后,发现用命令行打印的文件不显示中文。
设置地区
首先,我们先执行 sudo raspi-config ,把里面的 locale 设置为 ZH-CN UTF-8。
然后重启之后再打印,发现还是有部分中文字符无法显示。
安装uming字体
经过查资料,发现lpr打印依赖的是uming字体,但是树莓派默认没有安装。所以我们需要执行 sudo apt install fonts-arphic-uming 进行安装。
设置自启动
首先我们需要编写一个shell当可执行文件:
#!/bin/sh
cd /home/zsd/lp_site
python main_flask.py
需要注意的是,该shell脚本开头必须指定解释器,不然自启动会会报失败。
接下来,我们添加service文件,sudo vim
/usr/lib/systemd/system/lp_site.service
[Unit]
Description=lp_site
[Service]
Type=oneshot
ExecStart=
/home/zsd/lp_site/main_flask.sh
[Install]
WantedBy=multi-user.target
然后使能自启动,即可: sudo systemctl enable xx_net.service
猜你喜欢
- 2025-04-11 手把手教你开发智能备份神器,小白也能30分钟搞定!
- 2025-04-11 画像笔记23- 作业流程调度(2)(作业流程图怎么画)
- 2025-04-11 Python接口自动化之常见用例读取方法介绍
- 2025-04-11 AI办公自动化:批量合并多个Excel表格的数据并汇总
- 2025-04-11 pc端微信用户图片DAT格式解码为图片
- 2025-04-11 Python自动化脚本应用与示例(pythonui自动化脚本)
- 2025-04-11 21-02-Python-文件操作下(python文件操作方法)
- 2025-04-11 Python定时任务,三步实现自动化(python定时任务,三步实现自动化效果)
- 2025-04-11 自动下载邮箱里未阅读的发票,并用邮件标题里指定的几个字命名
- 2025-04-11 照片整理很繁琐?3个python脚本帮你快速整理照片
- 06-18CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- 06-18Window环境配置Mongodb(mongodb默认配置文件路径)
- 06-18FineReport如何连接和使用MongoDB数据库
- 06-18nosql之mongodb(nosql怎么读正确发音)
- 06-18Mongodb centos7安装(mongodb4.4.2安装教程)
- 06-18群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- 06-18MongoDB 安装及实践(mongodb的安装过程和操作命令)
- 06-18MongoDB最全详解(万字图文总结)(mongodb lsm)
- 最近发表
-
- CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- Window环境配置Mongodb(mongodb默认配置文件路径)
- FineReport如何连接和使用MongoDB数据库
- nosql之mongodb(nosql怎么读正确发音)
- Mongodb centos7安装(mongodb4.4.2安装教程)
- 群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- MongoDB 安装及实践(mongodb的安装过程和操作命令)
- MongoDB最全详解(万字图文总结)(mongodb lsm)
- CentOS安装MongoDB教程(centos安装mpich)
- MongoDB入门指南:下载、安装和配置一款强大的NoSQL数据库
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)