存档

文章标签 ‘Python’

supervisor

2023年10月12日 没有评论

在前面的文章中,我们使用了PM 2这个软件来做任务管理。今天再给大家推荐supervisor。

supervisor是一个进程管理工具,,同时,它也是一个客户端/服务器系统,允许用户在类unix操作系统上控制多个进程。

supervisor是用 Python 开发的一套通用的进程管理程序,具有下面的特点:
1、能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
2、当进程中断的时候supervisor能自动重新启动它
3、为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程

安装:

pip install supervisor

默认会生成下面路径

# supervisord 路径
/usr/local/bin/supervisord
# supervisorctl 路径
/usr/local/bin/supervisorctl
# echo_supervisord_conf 路径
/usr/local/bin/echo_supervisord_conf
分类: 一句话 标签:

python 保存项目用到的包名生成requirements.txt

2022年2月26日 没有评论

安装:pip install pipreqs

在项目根目录下,打开控制台,输入:

pipreqs ./ –encoding=utf8

加–encoding=utf8为了避免编码错误

分类: Python, 一句话, 日常 标签:

PyAudio 安装出错 command ‘x86_64-linux-gnu-gcc’ failed with exit status 1

2018年8月10日 没有评论

昨天在服务器上安装 python的音频库 pyaudio时,无法正确安装,而在本机Windows上没有遇到这个问题。

网上一番搜索,最后发现安装 protaudio19-dev 这个库解决了我的问题。

sudo apt-get install portaudio19-dev

分类: Python, 一句话 标签:

shadowsocks 无法启动

2018年5月29日 没有评论

在 Ubuntu 发布了18.04 的长期支持版本后,就有打算升级服务器的系统。

但是执行 do-release-upgrade -d 后,运行报错,大意是 python 的编码问题。后来干脆就把系统干掉了重新安装,新安装的系统里看起来默认没有python 2.7,赞一个。

安装SS后,发现无法启动服务。看起来大意是 openssl 的问题,在网上搜索后发现是 openssl 的新版本里给移除了某些函数的支持导致。

最后在github 上看到大家有讨论,并提供了修复版本。但是目前需要手动安装

pip3 install -U git+https://github.com/shadowsocks/shadowsocks.git@master

分类: 一句话 标签:

解决Python 使用 pip 安装 pylint 失败的问题

2018年2月3日 没有评论

这几天在使用 Sublime Text 写 python 代码,然后开个cmd 去跑结果,想加个智能提示,搜索了下还是觉得麻烦,想要更懒一点的版本。

打开了一次都没有使用的Pycharm,结果提示要升级,不知道什么原因一直卡着进度条,这个工具好是好就是大了些。于是一时愤懑,把 Pycharm 给卸载了,去下载了 Visual Studio Code 安装,打开时提示还要安装 pylint,点击安装结果出错了。

还以为是哪里出问题了,就在命令行里再执行了一遍,发现还是出错。

网上搜索了一圈,一个比较快速的方法是按照错误提示修改文件,打开本地的 Python\Lib\site-packages\pip\compat\__init__.py 文件,在大约 75行的位置,将 “utf_8″修改为“gbk”,保存,重新安装 pylint,就成功了。

我为了保险起见,把文件给改回成 “utf_8″了,奇怪的是为什么这里要使用下划线而不是连接符。

一直没有安装 Visual Studio Code的原因是觉得 LiteIDE 已经很不错了,现在还是入了 Visual Studio Code的坑啦。

分类: 一句话, 日常 标签:

解决 Python 3 调用 Redis 字符串显示 b 前缀的问题

2018年2月2日 没有评论

昨天有按照网上的教程去使用 Python 调用Redis ,代码很简单,就像下面这样子:

但是,运行后的结果显示  b’python’ ,多了一个b,但是获取字符长度的确又是对的,觉得很是奇怪。

今天有向同事妹子请教,后来得出的结论是用回 python 2.7。和妹子继续搜索,发现了解决方法:sys.stdout.buffer.write(r.get(“name”)) ,这么一来需要再引入 sys 库,而且需要自己添加换行符了。

继续搜索,我们可以使用 print(r.get(‘name’).decode(‘utf-8’)),即解码一下然后再显示。稍微好了一点,但是每次要读取 Redis 数值的时候,都要这么来转换下确实显得有点猥琐。

我在想,一定还有更简单的方式。最后看到 stackoverflow 和简书上也讨论了这个事情,有一个剑走偏锋的设置,就是在数据库的连接字符串里多添加一个参数 decode_responses=True,这么一来就会自动将 response 解码。这么做大多数情况下是没有问题的,需要额外注意的是,如果保存在 Redis 数据库里的原始数据就是二进制的,那么通过这种方式,可能得不到自己想要的结果。

在实际运用的时候,就可以灵活考虑了,适当的时候综合使用这两种方式。

 

分类: Python 标签: ,

MxNet 深度学习框架安装(一)

2017年3月1日 没有评论

最近是想看看深度学习的东西,网上有搜索一下,貌似MxNet还不错,于是打算选择该库作为入手。

作为系列文章的第一篇,当然是安装拉,这里以windows 10安装为例,Ubuntu上的就再等等吧。

在安装之前,大家需要深度学习的使用语言,多为python和c+之类的。MxNet支持的语言比较多,对R也支持。

首先,我们需要安装Python,从官网上下载安装包,衣服自己洗这里选择的是3.6的版本,一路无脑下一步即可。在安装完成后,请确保python的路径已经被添加到系统的环境变量下。

接下来,再安装 pip,从官网上下载文件到本地,然后运行

python get-pip.py install

安装完成后,请添加python目录下的scripts目录到系统的环境变量下。接下来安装 numpy,进入 https://pypi.python.org/pypi/numpy,选择对应的whl版本,下载到本地,然后运行

pip install numpy.whl

在开始的时候,衣服自己洗选择的从网上安装,总是会失败,搜索了一番才果断采用离线安装,很是顺利。

下面就是正主上场拉,从https://github.com/dmlc/mxnet/releases下载预编译好的包,由于我的机器不支持cuda,所以就下载的是cpu的版本,例如20160531_win10_x64_cpu.7z,解压缩到本地,这样的东西我还是放到C盘根目录下比较保险点。

对于想玩CUDA的同学,请先到nvadia去注册,然后下载他们的SDK,解压缩后放到mxnet\3rdparty\cuda 目录下。

最后一步就是准备配置了,按照官方的readme文件,进入到mxnet的目录,双击运行setupenv.cmd来配置环境变量。再进入到 mxnet\python目录,运行 python setup.py install.

如果一切都顺利的话,应该是可以安装成功的。

如何验证呢,运行下面的命令

C:\> python
>>> import mxnet as mx
>>> a=mx.nd.zeros((2,3))
>>> print(a.asnumpy())

如果结果为

[[0. 0. 0.]
[0. 0. 0.]]

就表明mx安装成功拉。

如果你想使用C++来开发的话,请使用mxnet\lib目录下的文件:libmxnet.dll和libmxnet.lib。

今天的内容就到此结束,看起来很简单,确实花了一个下午的时间才理清。有什么不懂的,欢迎留言。

分类: 日常 标签: , ,

Python初试

2015年1月13日 没有评论

工作上最近有遇到一个事情,服务器收集的日志信息里,对于日期格式的字符串描述采用的是yyyy-M-d的方式,而后端逻辑程序对这块的处理的不够(这个让衣服自己洗很是迷惑),但由于跨部门利益关系,问题的解决优先级不够高。

于是,一个折衷的思路就是在后端逻辑处理日志前,先通过某种方式来个预处理。递归遍历目录下的所有子目录和文件,打开文件,正则查找到要处理的日期字符串,替换,然后保存。看起来不太复杂。

由于是Linux服务器,同时也因为一些原因,服务器上也无法安装mono,所以通过c# 写处理程序的方式就行不通。剩下的就分为下面几种思路:

  1. shell 命令
  2. perl/python 脚本
  3. C/C++ 程序

问题就在于我对这些都不会,最开始是想用c++来处理。然后网上搜索了一通资料,对于跨平台的c++,也碰到些问题,例如io.h头文件是没有的,对于正则估计还得用boost之类的,然后后面使用 strncat 这样的函数简直是给弄恶心了。所以在连抄带猜地写完目录遍历后,我就放弃了。Java 程序,我觉得还是算了吧。

我觉得为解决这个事情去学一个语言,成本是不是太高了点,想抱个大腿。找到了@屈屈,他很快就给出了答案,这就是差距。

for i in `ls *.txt`;do mv -f $i `echo $i | sed ‘s/-\([0-9]\)/0\1/g’`;done

虽然不能完全看懂啥意思,不过看起来很绚丽,对不对~多谢屈屈的帮助。

后来网上又下了个Python电子版教程,简单看了下,网上各种搜索和抄袭,最后弄了个Python的脚本,也算是勉强交差吧。

code

import os
import re
import sys

dir = “/Users/mmcer/temp”
if len(sys.argv) > 2:
dir = sys.arg[1]

def check(dir):
for f in os.listdir(dir):
file = os.path.join(dir,f);
if os.path.isdir(file):
check(file)
#pass
elif os.path.isfile(file):
if(f.startswith(“.”)):
#filter Linux system file
pass
else:
print “path is ” + file
think(file)

def think(path):
file = open(path,”r”)
content = file.read()
file.close();

reg = re.compile(“(\d{4})-(\d+)-(\d+)”,re.M)
matches = reg.findall(content)

for match in matches:
year = match[0]
month = match[1]
day = match[2]
old = year + “-” + month + “-” + day

_year = match[0]
_month = match[1]
_day = match[2]

if len(year) == 2:
_year = “20” + year
if(len(month) == 1):
_month = “0” + month
if(len(day) == 1):
_day = “0” + day

newStr = _year +”-” + _month + “-” + _day

content = content.replace(old,newStr)

file = open(path,”w”)
file.write(content)
file.close()

check(dir)

两种思路都提供给对方了,至于如何选择就看人家怎么使用了。

分类: 日常 标签: