分类 "Python" 下的文章

问题:在python3.9环境下,使用pip安装dogpile.cache模块时报错ImportError: cannot import name 'Lock' from 'dogpile'

解决:在python3.5环境下不会出现此问题,开始以为是python版本的问题,后来发现安装时提示了not install wheel,所以只需要安装wheel即可。也可能是dogpile.core与dogpile.cache冲突,删除dogpile.core即可。

方法:

windows安装 python3.9
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip wheel
.\.venv\Scripts\pip3.9.exe install -r setup/requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
.\.venv\Scripts\pip.exe uninstall dogpile.core

阅读全文

问题:FastAPI的HTTPException中有detail,如何去?

解决:重新定义HTTPException,及验证用的RequestValidationError

方法:

from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError
from routers import router

app = FastAPI()
async def http_exception_handler(request: Request, exc: HTTPException) -> JSONResponse:
    return JSONResponse(
        status_code=exc.status_code,
        content=exc.detail)

阅读全文

问题:subprocess.popen进程卡死如何解决?

解决:原因是subprocess的PIPE是有大小的。在python2.6.11之前,PIPE的大小为文件页的大小(i386上是4096),2.6.11之后变为65536.因此当输出内容超过65536,会引起阻塞。因为PIPE已经被塞满了,无法再塞进更多的数据。
解决方法是不用subprocess提供的PIPE,或者不要实时输出执行命令后的输出内容。

方法:

obj = subprocess.Popen(cmd,stdout=fileno,stderr=fileno,shell=True)
obj.communicate()

关闭输出内容

from subprocess import DEVNULL, STDOUT, check_call
check_call([cmd, arg1, arg2], stdout=DEVNULL, stderr=STDOUT)

with open(os.devnull, 'w') as fp:
    cmd = subprocess.Popen(("[command]",), stdout=fp)

阅读全文

问题:使用subprocess.Popen启动进程时,启动了两条进程,如何解决?

解决:添加executable='bash'

方法:

cmd_date = 'python test_01.py'
process = subprocess.Popen(cmd_date, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, executable='bash')
stdout, stderr = process.communicate()
print(stdout, stderr, process.pid)

阅读全文

问题:SM2加解签如何使用?

方法:

import base64
import binascii
from gmssl import sm2, func
#16进制的公钥和私钥
private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'
sm2_crypt = sm2.CryptSM2(
    public_key=public_key, private_key=private_key)

阅读全文