自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 Python学习:如何通过非阻塞方式读写子进程输入输出

线程很多情况下不能提升性能,而且不容易杀死,容易阻塞,编写线程并发永远不是一个简单的问题。多进程并发,也是如此,如何杀死进程,如何读进程输出不阻塞,处理起来也不是那么容易。到这里为止,关于子进程读写的主要内容都已经说到了,剩下的就是进行详细的封装,设计成类,便于使用而已。,有兴趣去可以搜索下,不是本文的重点),使用起来限制太多,不容易设计成与子进程进行灵活的交互。(循环执行的装饰器)等方法都比较简单,限于篇幅就不放代码了,自己改造下,或者自己实现。子进程的输入管道,写一般不会阻塞的,直接调用。

2023-03-30 00:08:06 1647

原创 Python学习:loguru日志库

中的日志库使用起来有点像,但配置通常比较复杂,构建日志服务器时也不是方便。标准库的替代品是,使用起来就简单的多。默认的输出格式是:时间、级别、模块、行号以及日志内容。不需要手动创建 ,开箱即用,比使用方便得多;另外,日志输出内置了彩色功能,颜色和非颜色控制很方便,更加友好。是非标准库,需要事先安装,命令是:******。**安装后,最简单的使用样例如下:上述代码输出:日志打印到文件的用法也很简单,代码如下:上述代码运行时,可以打印到console,也可以打印到文件中去。默认格式是时间、级别、名称+模块

2023-03-25 00:05:17 3252

原创 docker学习:Fedora容器

网上介绍fedora容器非常少,基本都是ubutun容器。fedora容器使用过程还是遇到一些小问题,有必要单独说明下。

2022-11-29 00:11:52 589

原创 docker学习:docker基础容器构建

准备一台ubuntu系统,可以是vm也可以实体机。本文的内容是基于vm环境构建。

2022-11-24 01:35:04 410

原创 Python学习:python对象转换json字符串

1.问题json是网络传输比较简单易用。python中,json和dict对象可以相互转换,首先我们看下简单的dict对象转换。student = { 'name': 'chaos', 'age': 18, 'school': { 'name': "tsinghua" }}print(json.dumps(student))输出为:{"name": "chaos", "age": 18, "school": {"name": "tsinghua

2021-10-03 17:31:17 4904 1

原创 Python学习:如何试用pytest-mock(2)

1.问题前面我们讨论了pytest-mock,给模块mock的使用方法。当时还列举了两个问题,如何给对象的属性进行mock,以及如何同一个地方进行mock,避免每个测试用例单独mock,我们现在来看看这两个问题。2.方案2.1.给对象属性mock首先我们看下为何会有对象mock的问题。python中不少代码,开发的时候不会指明类型,到了实际执行的时候才会知道用什么类型,因此不能使用import,所以用前面说的对模块mock就行不通了。我们来构造这样一个例子。chaos模块中,继续定义一个Perso

2021-09-05 11:46:24 577 2

原创 Python学习:如何使用pytest-mock(1)

1.问题使用pytest做python代码的测试是很容易的,不过被测试代码对网络、数据库等远程服务有依赖,这种情况该如何快速方便的进行测试。2.方案python的unitest包是支持单元测试的,有mock可以用。并且pytest-mock进行高层次的封装,用起来更加方便。安装包:pip3 install pytest-mock2.1.小试牛刀直接采用类似官方的例子,我们代码中要使用os.getcwd获取当前工作目录。只是我们的代码是在windows系统上,实际代码需要linux下工作,测试代

2021-09-05 11:45:29 1284

原创 Python学习:执行系统shell命令

1.问题python可以作为shell替代,代码比较直观,易于维护。 python支持调用外部shell命令。不过,这个问题没有看上去简单,要完美的解决此问题,比较复杂,就连标准库也不见得处理得很好。2.方案2.1.方案一首先最简单的方法就是调用system方法,直接执行系统shell命令,代码如下:import osos.system('ls -l')system主要问题,就是无法获取shell命令的输出,无法进行输入;也没有超时设置,如果外部命令挂死,会直接导致当前进程挂死。2.2

2021-08-22 17:34:34 3536

原创 Python学习:scapy库的Packet与str相互转换

1.问题python的scapy库,是构造TCP/IP报文的利器,并且支持asn.1,搞过电路交换协议的人一定会明白基于asn.1协议的描述复杂度。使用中遇到的一个比较麻烦的问题,scapy抓到的Packet如何在网络中传输,如何在使用端还原到Packet类型。2.方案2.1.Packet转换为strPacket转换为str很简单,直接上代码:from scapy.all import *pkts = sniff('eth1', count=1, timeout=5)pkts[0].sho

2021-08-08 21:25:14 2208 1

原创 C++学习:Effective Modern C++条款

条款1:理解模板类型推导推导模版类型时,引用的值视为非引用,即忽略引用。推导通用引用类型参数时,左值特殊处理。推导传值参数时,忽略const和volatile。+推导模版类型时,参数是数组或函数名则退化为指针,除非用来初始化引用。条款2:理解auto类型推导推导auto类型一般和推导模版类型是一致的,但auto类型推导对于大括号初始化{}会推导为std::initializer_list,模版类型推导则不会。做为函数返回类型或lambda参数中的auto类型推导意味着模版类型推导,而不做

2021-06-11 23:03:56 625 2

原创 Python学习:如何使用pandas分析excel数据(续)

1.问题上篇,简单介绍了pandas库的使用,列出了常见操作的方法。本篇并不是继续讲述pandas库的使用,而是通过封装一个Excel类型,讲述如何封装第三方库,及其为何要封装。2.方案2.1.概述Python的第三方库很多,很多库有官方文档,有的库文档齐全,直接使用也没多大问题。一般情况,我都会自己封装起来再使用,因为使用第三方库存在一定的风险。封装的目的,主要有以下几个方面的考虑:封装降低复杂性,我们可能只需要库的部分功能,屏蔽用哪些用不到的功能,防止误用。封装提高可维护性和可替代性。第

2021-05-22 18:11:31 462

原创 Python学习:如何使用pandas分析excel数据

1.问题在python中,读写excel数据方法很多,比如xlrd、xlwt和openpyxl,实际上限制比较多,不是很方便。比如openpyxl也不支持csv格式。有没有更好的方法?2.方案更好的方法可以使用pandas,虽然pandas不是专门处理excel数据,但处理excel数据确实很方便。本文使用excel的数据来自网络,数据内容如下:2.1.安装使用pip进行安装。pip3 install pandas导入pandas:import pandas as pd下文使用pd

2021-05-09 21:40:44 3460 23

原创 Python学习:M1系统上如何使用pandas

问题目前为止,M1系统上还不能使用pip3安装pandas库,无法使用pandas进行数据分析和处理。虽然网上也有专门适配M1的python环境,但也比较麻烦,不够纯粹。那在M1上,如何使用pandas?方案docker新版本已经支持M1了,我们不妨尝试一下,是否可以用vscode+docker使用pandas。1.安装M1版本的docker访问https://docs.docker.com/docker-for-mac/install/,下载M1版本的docker。2.安装python镜像

2021-04-28 22:26:16 1791 12

原创 JavaScript学习:如何使用vscode直接调试ts

问题Python学习过程,研究vscode开发python项目时,准备学习开发vscode插件,不过vscode官方插件开发的样例都是TypeScript语言。vscode上调试JavaScript很方便,但调试TypeScript好像有点麻烦。要像JavaScript那样直接在vscode中调试,不用浏览器调试。方案TypeScript语言是JavaScript的超集,网上讲的调试方法,大多是先把ts编译成js文件,使用起来也不大方便。github上有个强大的工具ts-node,提供了TypeSc

2021-04-25 22:38:29 671 1

原创 Python学习:vscode开发python项目的正确姿势是什么?

问题Python项目,有着Pycharm这么优秀的工具在,其他IDE工具基本都显得有点相形见绌。只是Pycharm社区版不支持远程调试,有些语言也支持不好,比如Markdown就显示很弱。因此,有时候不得不依靠其他IDE工具。这个时候,可以选择vscode。vscode这些年越来越强了,但开发python项目,vscode配置不容易使用,总是遇到这个问题,或者那个问题上,长时间找到办法就搁置了。能否在vscode上,进行优雅的开发python代码,达到或者超过Pycharm那种开发体验?我觉得是能。这两

2021-04-22 23:01:19 646 4

原创 Python学习:如何使用类型注解

问题Python代码写起来很快,但阅读起来,就很抓狂,主要问题就是类型信息丢失,看到一个函数或方法,都不知道如何传递参数,该函数会返回什么结果。只有运气来,才可以看到类型信息。方案Python 3.6版本之后,新增了类型注解特性(type hint),用户标记函数参数和返回值的类型,该特性主要是给人和IDE用的,实际代码执行的时候,并不会有作用,即使传递不期望的类型,依然会执行。接下来,列绝一些常用的类型注解。单一类型注解def add(x : int, y: int) -> int:

2021-04-11 22:19:42 198 1

原创 C++20学习:concept用法介绍

概述众所周知,C++的泛型强大,很多语言都学了,比如C#、Java,虽然Java的泛型只是语法糖,不值得一提。C++的template实际上是创造了一种新的语言,这个语言是编译期的,相当于编译器把代码解释成C++语言,然后再编译成机器指令。STL的诞生,是颠覆性的创举,然而STL所用到的泛型还只是C++template中其中一部分特性。C++使用template实现泛型算法,我们来看下一个简单的例子。template<typename T>T inc(T a){ return

2021-01-17 17:01:00 1453 2

原创 C++20学习:基于Ubuntu系统编译gcc10.2.0

问题c++20标准已经发布,c++20有比较多的新特性。想尝个先,虽然目前还没有一个编译器能够完全支持c++20标准。gcc和clang编译支持c++20多一些,gcc支持最好。安装Ubuntu系统20.0.4,自带的gcc都还不支持c++20。需要使用最新的gcc10.2.0版本,需要编译。于是自己动手。编译gcc1.下载最新的gcc10.2.0访问:https://gcc.gnu.org/mirrors.html,找个镜像金星下载gcc2.解压缩我下载的是xz文件,需要先试用x

2021-01-15 23:42:03 3342 1

原创 C++20学习:基于ubuntu编译log4cxx

1.问题java中,log4j库非常好用,支持性也非常广泛。c++中,是否也有类似的库?最好能够夸语言互通。2.方案一般优秀的库,其他语言应该都会借鉴,实现不同语言版本。通过搜索,c++的log有好几个版本,比如log4cpp,log4cxx,log4cplus等。本文采用log4cxx库,因为它是log4j同源的。2.1.环境准备ubuntu 20.0.4 gcc gcc 10.2.0(可以用自带的gcc版本) 下载log4cxx:http://logging.apache.org

2021-01-15 22:38:02 521 1

原创 Python学习:带参数的装饰器

问题前面写了一个统计函数执行时间的装饰器,默认使用print函数打印执行日志。日志打印,不能假设一定会用print,能否使用自定义的日志打印,比如logger方案先看前面提供的exec_time装饰器的代码:import timefrom functools import wrapsdef exec_time(): def decorator(func): @wraps(func) def wrapper(*args, **kwargs).

2021-01-01 18:07:28 286 1

原创 Python学习:json对象快速访问(续)

问题我们再次回到jsonpath的问题,起初使用jsonpath-ng实现快速访问json对象节点。但jsonpath-ng的性能问题,导致这个方法实在是糟糕,无法使用,悲剧的是已经写了很多代码,再用全路径访问json工作量有点太大,有点进退两难。回过头思考,起初我的目的,就是不必要写全路径访问json节点,通过jsonpath只需要写一个节点进行模糊匹配,实现节点访问。实际上该需求并不复杂,并没有用到jsonpath的复杂功能。能不能不用jsonpath,也能实现?幸运的是方案是存在的,而且实

2021-01-01 00:11:48 569 4

原创 Python学习:jsonpath的性能问题

问题前面刚总结了,利用jsonpath可以快速访问和设置json对象节点值的帖子。没想到这么快就打脸了。python的jsonpath居然性能如此之差,简直无法接受。今天其实就是抛一个问题,作为记录,希望后续能够找到解决之道。方案利用python装饰器,可以轻松写一个记录函数执行时间的功能。代码如下:import timefrom functools import wrapsdef exec_time(): def decorator(func): .

2020-12-26 23:23:10 870 4

原创 Python学习:函数类型自动检查

问题python语言是一门易学易用的语言,不过相比起c++、java语言,就是读别人的代码,是比较痛苦的,尤其代码量比较大的情况,更是如此。def add(a, b): return a + bprint(10,20)print('10','20')问题的根本原因,就是python中一切皆是对象,函数丢失了类型信息,读起来相当痛苦,只有执行过程,才比较方便掌握代码。解决方案方法一,类型注释python语言缔造者,也已经看出来了代码中没有类型信息的问题。当下的p.

2020-12-25 23:44:07 514

原创 Python学习:基于paramiko的交互式shell

问题我们希望在windows或者linux上,可以使用ssh连接远程服务器,并且能够执行一般的linux命令,同时还要能够有一定交互能力。比如需要切换root用户,输入管理员用户密码等。解决方案Python的paramiko库,可以支持。但实现也有挺多问题需要考虑。主要有以下几点内容:命令执行,能够获取命令结果 命令执行,能够支持指定的预期结果 命令执行,要有超时能力,不能挂死。用法1:ssh = Ssh2Client('127.0.0.1', 22)ssh.connec.

2020-12-25 20:16:54 1456 2

原创 Python学习:json对象快速访问,jsonpath的神奇妙用

概述json对象和xml对象都是树形结构,文本存储,容易理解。但是,构造起来却相当繁琐,嵌套比较深,代码也不好看,难以维护。xml和xpath是一对,很容易联想到json和jsonpath也应该成对出现。jsonpath可以使用得json对象访问变得更加简洁,代码更易维护,避免过多的分支嵌套。幸运的是,jsonpath有规范定义,java和python也都有第三库可以使用。安装jsonpath库jsonpath第三方库,github上有好几个,比如jsonpath,jsonpath-rw,j

2020-12-11 21:35:43 668

原创 算法学习:完整的表达式括号匹配算法

《算法4》课后题目中,有一道题:编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入: 1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ) 你的程序应该输出: ((1 + 2) * ((3 - 4) * (5 - 6)))网上有关这道题目,实现的基本都是左括号匹配,对于右括号匹配,未能找到答案。如果考虑操作符优先级的话,题目给出的预期结...

2019-10-13 00:06:05 1079

原创 java学习:log4j输出xml格式的日志文件(log4j2篇)

上一篇讲解了log4j输出xml格式的日志文件,本篇讲述log4j2.x版本。log4j2.x版本相比log4j1变化很大,使用起来也更麻烦,主要是jar包的依赖的问题。先上代码,然后再列举遇到的问题。1、Log类代码import org.apache.logging.log4j.LogManager;  import org.apache.logging.log4j.Logger;im

2016-07-16 23:59:51 9114 1

原创 java学习:log4j输出xml格式的日志文件

最近使用log4j库,由于需要输出xml格式的日志文件,有关输出MDC和NDC内容,折腾了整整一天,最后还是切换使用log4j2.x才能够成功。网上搜索了很久都没能找到原因,国内外搜了上百篇,借鉴一些帖子,然后推断出了原因。现整理如下,作为备忘录。1、下载log4j-1.2.17.jar,可以到网站http://mvnrepository.com/搜索,这个网站的jar包很全。2、

2016-07-16 23:05:54 4835

原创 Jetty:Hello World,使用main启动的简单http server

使用jetty开发http server能力,通过main启动的hello例子。第一步:下载jettyhttp://download.eclipse.org/jetty/stable-9/dist/第二步:使用eclipse创建普通的java工程,取名为learnjava,同时把jetty压缩包下面的lib目录下jar文件,放到learn/lib/j

2016-06-16 23:12:42 5558

原创 C++学习:string构造函数的bug

c++中,有时需要调用c语言函数,要把char*转换成stl的string,但使用过程,就出现问题。比如下面代码,就会导致程序coredump。不同的版本,可能结果不同。xcode9.x和vs2005所使用的编译器的都出现这个问题。#include using namespace std;const char* get_cstr(void){ return 0;}int ma

2016-05-07 14:46:35 757

原创 Python学习:mac下使用boost.bython扩充python

1、第一步,先要准备boost库,编译库,需要编译python库,我使用python的环境是python2.7。我使用的boost 1.5.7版本。存放在目录为:/Volumes/data/code/c++/boost_1_57_0。boost的编译,网上有一大把。这里就不详细说了。说明:如果你的mac机器 /usr/include头文件很少,你可以使用下面这个命令安装。x

2015-08-23 01:36:35 3522

转载 Python学习:PyCharm 使用简介(转)

最近由于项目需要,领导要求使用python以方便扩展,没有办法,赶鸭子上架花了2天时间翻完了python的初级教程然后就开始写代码。有一款好的IDE可以帮助我快速上手一门新语言,这里就介绍一下PyCharm这个python的IDE吧。1、安装和首次使用PyCharm 是我用过的python编辑器中,比较顺手的一个。而且可以跨平台,在macos和windows下面都可以用,这点比较好

2015-04-05 18:45:44 3863

原创 C++学习:使用libssh2实现交互式shell的ssh2,linux和windows通用

使用ssh2实现shell自动化测试,实际工作中遇到非常多。各种语言都有相应的库可以使用。比如,c/c++语言可以使用libssh2;python可以使用paramkio库等。但这些库网上的帮助,都不是很全,都比较浅显。shell自动化,最基本的三个需求,一个是适合多重类型的操作系统;二是要能够支持交互式shell,比如使用sudo执行时,需要输入密码;三是读数据时要非阻塞的。

2015-04-05 16:51:22 25223 6

原创 Python学习:selenium2 + python3.3.5 开发环境准备

Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和

2015-03-17 22:54:51 1728

原创 Python学习:使用boost c++嵌入python,获取异常信息输出到字符串

使用boost::python,很容易在c++嵌入python,不需要关心python那些c api的复杂性。但有一个问题是python编译出错信息或者异常信息不能重定向字符串里,打印出来,python错误信息默认是输出到stderr的,是基于命令行的。通过文件重定向有点麻烦,需要写一些python脚本,也不直观。通过很长的摸索和搜索,终于找到了下面的方法。       通过以下c++代码,可

2014-12-07 22:26:01 2907

原创 Python学习:python扩展库lxml学习

这几天一直想找到一个xml库,能够方便搜索,搜索条件能够满足xpath语法规则的。网上有很多xml库,在python下,找到lxml扩展库比较方便。虽然需要手工安装,但lxml却是很方便。windows下安装又傻瓜化的。把一些学习过程中摸索的记录下来,便于后续自己查阅,网上搜到的例子,实在是过于简单,也不适用,我主要查找xml节点,然后修改再保存。

2013-11-23 00:13:59 2335

原创 Python学习:使用Eclipse,配置Python开发环境

安装python解释器安装PyDev:首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Eclipse无法正常运行,请到Java官网下载JDK安装:http://www.oracle.com/technetwork/java/javase/downloads。打开Eclipse,找到Help菜单栏,进入Ins

2013-11-22 23:14:09 1029

原创 Python学习:python33安装lxml扩展库

1、确保已经安装MacPorts软件,可以登陆http://www.macports.org/install.php下载这个软件下载MacPorts-1.9.2-10.6-SnowLeopard.dmg,下一步下一步安装即可。2、登陆MacPorts网站http://www.macports.org/ports.php,在上面找到你想要安装的软件。安装python3.3版本,在

2013-11-22 23:11:06 1621

原创 C++11:SuSe Linux和Mac系统编译gcc 4.8.1

1、下载gcc 4.8.1源码包:http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.1/gcc-4.8.1.tar.bz22、解压:tar -jxvf gcc-4.8.1.tar.bz23、下载编译所需的依赖包:这个步骤有两种方式完成:a) 如果Linux有网络连接,直接这

2013-10-23 01:06:04 2378

原创 C++11:nullptr

0.NULL的前世今生对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价(别惊讶,这是真的)。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。在C中,习惯将NULL定义为void*指针值0:#define NULL (void*)0但同时,也允许将NULL定义为整常数0

2013-10-23 01:02:28 1506

深度学习 epub版本

深度学习的epub格式,可读性还比较高,感兴趣同下载。

2018-06-07

通过管道进行cmd进程输入输出重定向,源代码

源代码这是一个头文件,解决了命令行输入输出重定向问题,可以直接使用。测试代码如下: #include "console.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { Console console; if( false == console.RunProcess("cmd.exe") ) { cout<<"create cmd.exe process fail"<", 3000, outstr); cout<<outstr<", 3000, outstr); cout<<outstr<<endl; return 0; }

2012-09-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除