精华内容
参与话题
问答
  • 基本使用(续1)

    2018-06-06 22:07:40
    第三章、基本使用 2.Request import urllib.request request=urllib.request.Request('https://python.org') response=urllib.request.urlopen(request) print(response.read().decode('uft-8')) 还是用...

    第三章、基本库的使用

    2.Request

    import urllib.request
    request=urllib.request.Request('https://python.org')
    response=urllib.request.urlopen(request)
    print(response.read().decode('uft-8'))
    

    还是用urlopen()方法发送请求,只是参数由URL变为一个Request类型的对象。
    Request的构造方法如下:
    class urllib.request.Request(url,data=None,headers{},….)
    第一个参数是必传参数;第二个参数data要传的话必须是bytes类型,如果是字典,先用urllib.parse模块里的urlencode()编码;第三个参数headers,可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。
    下面传入多个参数构造请求

    from urllib import request,parse
    url='http://httpbin.org/post'   # 参数1
    headers={
    'User-Agent':'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)',
    'Host':'httpbin.org'
    }  #参数2
    dict={
    'name':'cai'
    }  #参数3
    data=bytes(parse.urlencode(dict),encoding='utf-8')  #参数4
    req=request.Request(url=url,data=data,headers=headers,method='POST')
    response=request.urlopen(req)
    print(response.read().decode('utf-8'))

    另外,headers也可以用add_header()方法添加:
    req=request.Request(url=url,data=data,method=’POST’)
    req.add_header(‘User-Agent’,’Mozilla/4.0(compatible;MSIE 5.5;Windows NT)’)
    3.高级方法
    虽然可以构造请求,但对于一些更高级的操作(Cookies处理、代理设置等),就需要Handler(理解为各种处理器)

    • 验证(略)
    • 代理 (略)
    • cookies
      将网站的cookies取下来,代码如下:
    import http.cookiejar,urllib.request
    
    cookie=http.cookiejar.CookieJar()  #声明CookieJar对象
    handler=urllib.request.HTTPCookieProcessor(cookie)  #构建handler
    opener=urllib.request.build_opener(handler)  #构建opener
    response=opener.open('http://www.baidu.com')
    for item in cookie:
        print(item.name+"="+item.value)

    得到每条cookie的名称和值
    将cookies以文本形式保存:

    filename='cookies.txt'
    cookie=http.cookiejar.MozillaCookieJar(filename) #替换
    handler=urllib.request.HTTPCookieProcessor(cookie)  #构建handler
    opener=urllib.request.build_opener(handler)  #构建opener
    response=opener.open('http://www.baidu.com')
    cookie.save(ignore_discard=Ture,ignore_expires=True) #替换
    展开全文
  • 动态使用方法

    千次阅读 2016-04-16 15:50:45
    在编写程序时,动态是常常用到的工具,在vs等编程环境下只需要,完成工程的本地化配置或是直接将dll配置到环境变量即可(不推荐,毕竟小题大做了),而对于像楼主这样刚刚接触Linux操作系统的菜鸟来说,配置动态...

    在编写程序时,动态库是常常用到的工具,在vs等编程环境下只需要,完成工程的本地化配置或是直接将dll配置到环境变量即可(不推荐,毕竟小题大做了),而对于像楼主这样刚刚接触Linux操作系统的菜鸟来说,配置动态(共享)库还不是一个简单的问题。

    在介绍动态库的调用方法之前,先介绍一下动态库的编译(如何生成so文件)

    需要一个包含几个方法声明的头文件和对应的定义文件。例如

    //so_test.h 头文件
    #include "stdio.h"
    void test_a();
    void test_b();
    void test_c();
    //test_a.c:
    #include "so_test.h"
    void test_a()
    {
      printf("this is in test_a...\n");
    }
    //test_b.c:
    #include "so_test.h"
    void test_b()
    {
      printf("this is in test_b...\n");
    }
    
    #include "so_test.h"
    void test_c()
    {
      printf("this is in test_c...\n");
    }

    将上述so_test.h test_a.c test_b.c test_c.c 文件放与同一目录下,执行

    gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so

    这里写图片描述
    此时,我们可以看到 多出了一个libtest.so文件,这里的命名有些讲究,应该命名为lib+xxxx+.so后面再解释为什么,这就是我们刚刚生成的共享库文件。
    -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的(好像不是必须的哦)

    -shared : 该选项指定生成动态连接库,这个是必须的

    到这来似乎完成了共享库的编写,那么我们先来简单的介绍下两种调用方式:
    ①隐式调用
    ②显示调用

    简单来时,隐式调用就是指在我们的程序代码中,没有定义我们调用了哪个共享库,只是包含了某个贡献库的头文件而已,而在编译的时候需要指明共享库。我们继续用示例说明:

    #include "so_test.h"
    int main()
    {
    test_a();
    test_b();
    test_c();
    return 0;
    }

    很简单的调用,和普通的链接没什么区别啊!是的不过在编译的时候要花费一些功夫

     gcc test.c -L. -ltest -o test

    -L. : 表示需要链接的共享库在当前目录;

    -Itest : 表示调用的共享库的文件名为 lib+test+.so 即libtest.so

    我们运行一下生成的test文件
    这里写图片描述

    无法打开shared object file

    为什么不行,别急 我们借助ldd命令查看下 test文件的链接情况

    ldd text

    这里写图片描述
    我们刚刚写的libtest.so 就和你放在一个文件夹居然说找不到,服了(:зゝ∠)

    话说链接库可以从以下五个位置检索
    ①环境变量LD_LIBRARY_PATH列出的用分号间隔的所有目录;
    ②文件/etc/ld.so.cache中找到的库的列表,由ldconfig命令刷新;
    ③目录usr/lib;
    ④目录/lib;
    ⑤当前目录;

    我建议还是将我们生成的共享库拷贝到/usr/lib/或/lib目录下,修改LD_LIBRARY_PATH不是和windows环境下改环境变量一样小题大做吗?(个人看法请大神指正)

    cp libtest.so /usr/lib/
    

    这里写图片描述

    现在我们发现他能找到我们写的共享库了,也就能正常运行了。

    好的接下来看看显示调用

    此时我们已经写好了libtest.so共享库,并且已拷贝至/usr/lib/目录下

    显示调用,就是在代码中明确指明我们需要调用的共享库,而不需要在编译时指明,因此我们需要一些特殊的函数完成上述功能。

    我们需要用到一个头文件dlfcn.h 和其对应的四个函数。下面在介绍具体步骤再加以说明。
    ①把dlfcn.h系统头文件包含进来
    ②用dlopen()函数打开库文件,并指定打开方式;
    dllope()有两个参数
    第一个参数为共享库的名称,能取到的位置不在累述了。
    第二个参数为打开共享库的方式。有两个取值
    ①RTLD_NOW:将共享库中的所有函数加载到内存
    ②RTLD_LAZY:会推后共享库中的函数的加载操作,直到调用dlsym()时方加载某函数
    返回值是一个void *指针
    ③用dlerror()函数测试是否打开成功,并进行错误处理,返回值是一个char *;
    ④用dlsym获得函数地址,存放在一个函数指针中,调用格式是dlsym(void *,”fcnname”);
    ⑤用获得的函数指针进行函数调用。
    ⑥程序结束时用dlclose(void *)关闭打开的动态库,防止资源泄露。

    #include <dlfcn.h>         //包含头文件
    #include "so_test.h"       //包含共享库头文件
    int main(int argc,char *argv[])
    {
       void(*pT)();            //申请一个与共享库对应的函数指针
       void *Handle=dlopen("libtest.so",RTLD_LAZY);
                               //打开共享库,并有void指针 Handle保存
       if(Handle==NULL)        //检测是否打开成功
       {
           printf("Fail load library\n");
           return -1;
       }
       char * pE=dlerror();    //检测函数是否打开成功
       if(pE!=NULL)
       {
           printf("%s\n",pE);
           return -1;
       }
       pT=dlsym(Handle,"test_a");    //调用具体的函数
       pE=dlerror();                 //再次检测函数打开是否成功
       if(pE!=NULL)
       {
           printf("%s\n",pE);
           return -1;
       }
       (*pT)();                      //调用共享库的函数
       dlclose(Handle);              //关闭共享库
    
       return 0;
    }
    

    编译命令为

    gcc -o main -ldl test.c 
    

    -ldl : 指明生成对象需要使用共享库,但不用具体指明哪个共享库

    这里写图片描述

    (^o^)/~ 调用动态(共享库)的方法就先说到这来喽!!

    展开全文
  • curl使用

    千次阅读 2018-08-07 19:23:03
    一、curl 在window平台下的安装和使用 1、curl 的下载,https://curl.haxx.se/download.html ,下载完成后解压。 2、用vs的本地化工具编译。 进入解压后的目录下 C:\Users\username\Desktop\...

    一、curl 在window平台下的安装和使用

    1. curl 的下载,https://curl.haxx.se/download.html ,下载完成后解压。
    2. 用vs的本地化工具编译。这里写图片描述
      3.进入到下载的源码文件夹中,双击buildconf.bat文件运行
    3. 进入解压后的目录下
      C:\Users\username\Desktop\curl-7.61.0\curl-7.61.0\winbuild
    4. 将上面打开的x86本机工具切换到该目录,如图
      在这里插入图片描述
      5.编译生成库文件(可以生成debug和release库)
      切换进去后,输入如图所示的命令将库编译成静态库,命令的具体含义可以谷歌。下面插播一下vs与vc的版本对应关系,因为在该命令中需要输入对应的vc版本。
      Visual Studio 6 : vc6
      Visual Studio 2003 : vc7
      Visual Studio 2005 : vc8
      Visual Studio 2008 : vc9
      Visual Studio 2010 : vc10
      Visual Studio 2012 : vc11
      Visual Studio 2013 : vc12
      Visual Studio 2015 : vc14
      Visual Studio 2017 : vc15
    5. 编译完成之后就会形成一个build的文件夹,里面包括了我们需要的静态库
      这里写图片描述
    6. 项目配置
      所有需要的都在上图的第一个文件夹中,然后在把里面的include头文件和lib文件拷贝到我们的工程下,此时工程需要做一定的配置。主要需要添加一些系统动态库,这一步根据自己系统缺少的库而修改,在编译的时候可能会提示链接失败,到时候谷歌一下,看缺少什么库就好了,我主要添加了如图的库后编译成功。这里写图片描述
    7. 运行时库的选择,运行时库debug下配置为/MDd,release下配置为/MD.
      这里写图片描述
    8. 一切编译成功,现已的demo代码见我的github,该项目用vs2017创建的项目,目前为一个简单的test demo ,后面计划添加更多的test demo. https://github.com/senbieWang/CurlTest
    9. 其他版本的vs可以按照上图所示给出的方式编译成功,只是编译选项要设置好。
    展开全文
  • Eigen使用

    千次阅读 2018-09-13 22:14:04
    在用C++写MPC控制算法的时候,由于MPC算法包括矩阵运算,c++对矩阵的运算支持不是很好,而Eigen(读作 ['aɪgən])是一个简单易用的用于矩阵运算的。 1.安装 首先在官网下载Eigen,下载地址 解压缩文件可以...

    在用C++写MPC控制算法的时候,由于MPC算法包括矩阵运算,c++对矩阵的运算支持不是很好,而Eigen(读作 ['aɪgən])是一个简单易用的用于矩阵运算的库。

    1.安装

    首先在官网下载Eigen库,下载地址

    解压缩文件可以得到以下的文件

    我们主要使用的是其中的Eigen文件夹,这其中就是主要的文件。

    由于Eigen都是由头文件组成的,所以包含相应的库路径即可。

    在VS2017运行环境下

    首先包含相应的库路径

    在项目上右键,找到属性,添加相应的库路径即可,注意我这里包含到路径到Eigen这个文件夹,所以在包含头文件时,#include<Dense>即可,不需要写#include<Eigen/Dense>

    在ROS系统里面,在你的项目的CMakeLists中包含相应的库路径即可。

    2.简单使用

    在添加了相应的路径之后,在程序开头写这几行即可使用了

    #include <iostream>    
    #include <Dense>    
    using Eigen::MatrixXd;
    using namespace std;

    声明一个矩阵:

    MatrixXd P(3, 6);
    MatrixXd s(3, 1);
    MatrixXd v(6, 1);

    第一行表示生成一个3行6列的矩阵

    向矩阵输入数据,顺序输入即可

    v << -3, -2, -1, 3, 2, 1;

    输入常见矩阵

    MatrixXf m1(3,4);   //动态矩阵,建立3行4列。
    MatrixXf m2(4,3);	//4行3列,依此类推。
    MatrixXf m3(3,3);
    Vector3f v1;		//若是静态数组,则不用指定行或者列
    /* 初始化 */
    m1 = MatrixXf::Zero(3,4);		//用0矩阵初始化,要指定行列数
    m2 = MatrixXf::Zero(4,3);
    m3 = MatrixXf::Identity(3,3);	//用单位矩阵初始化
    v1 = Vector3f::Zero();			//同理,若是静态的,不用指定行列数

    矩阵的一些操作

    m.transpose();//矩阵转置
    m.inverse();//矩阵求逆
    m.determinant();//求行列式

    一个个人要用的操作,矩阵分块

    //如果定义一个尾数较高的矩阵,由10*10个三行二列矩阵构成
    MartixXd A(3*10,2*10);
    MartixXd a(3,2);
    //如果相对A矩阵块的某一个子矩阵赋值
    A.block(2*3,4*2,3,2) = a;//第一个第二个参数是子矩阵的开头位置,后面两个表示子矩阵的大小
    //这样就将第二行第四个子矩阵赋值
    

     

    展开全文
  • Python入门:jieba使用

    万次阅读 多人点赞 2018-05-17 21:20:12
    jieba 是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点。 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析 全模式:...
  • python Tkinter库使用案例

    万次阅读 多人点赞 2017-09-23 21:38:52
    用具体的实例讲解Tkinter库使用: 用上下左右方向键以及回车对红色方格做出相应的移动 # -*- coding: utf-8 -*- from Tkinter import * def main(): #创建tk对象 tk=Tk() #创建画布 canvas=Canvas(tk,...
  • Intel IPP库使用入门

    千次阅读 2015-04-09 11:42:20
    说明:本文基于IPP v5.3 update 3 for Windows* on IA-32,参考的文档采用安装包安装的文档; 文档“userguide_win_ia32.pdf”包含了本文的大部分信息;...按目标CPU型号,IPP分为以下几种类型(参考Releas
  • 安卓打包上线,用工具打包的时候出现 就改用输命令的形式生成签名文件 控制台 cmd 后输入以下内容 keytool -genkey -alias yl -keypass test888888 -keyalg RSA -keysize 1024 -validity 3650 -keystore E:\...
  • Intel IPP库使用入门

    万次阅读 2008-11-11 17:55:00
    version 1.02008-11-11说明:本文基于IPP v5.3 update 3 for Windows* on IA-32,参考的文档采用安装包安装的文档;文档“userguide_win_ia32.pdf”包含了本文的大部分信息;1 IPP概述全称:Intel® ...
  • cJSON库使用教程

    千次阅读 2015-08-25 15:55:11
    CSJON基本数据格式 cJSON 定义 typedef struct cJSON {   struct cJSON *next,*prev; // 数组 对象数据中用到   struct cJSON *child; // 数组 和对象中指向子数组对象或值     int type;...
  • Python之os库使用

    万次阅读 2018-06-10 22:01:06
    os使用os 提供通用的、基本的操作系统交互功能os 是Python标准,包含几百个函数,常用的有路径操作、进程管理、环境参数等。路径操作 :os.path子,处理文件路径及信息进程管理:启动系统中其他程序环境...
  • 这个是个警告 把他的话复制粘贴后,在终端中黏贴后就好了,他会把你保存
  • VS2015动态库使用示例

    千次阅读 2018-11-04 10:39:06
    静态使用静态链接方式,中的所有数据代码都将拷贝到调用程序的代码空间中去。也就是说你在哪调用了中的函数, 它会将被调用的函数的的数据代码全部拷贝到该位置。在链接阶段就直接打包进可执行文件中。 ...
  • Duilib界面库使用简介

    千次阅读 2016-09-07 16:23:39
    使用步骤 如何下载编译duilib我就不说了,github上有编译好的,这里假设你已经有了duilib的编译好的文件 1.引入头文件,文件 /引入duilib头文件和文件 #include //duilib依赖这个vc头文件,如果没有引入的...
  • 不管是使用指令创建的key: 还是使用Android Studio自带的功能创建的key 都会出现这个提示信息,提示信息的意思很明确,就是在指令行中执行提示的这段代码就行了,举个例子: 用指令创建key时给出的提示时这...
  • animate.css动画库使用方法介绍

    千次阅读 2016-07-13 16:45:52
    animate.css动画简介 Animate.css是由Dan Eden的Daniel Eden使用CSS3的animation制作的动画效果的CSS集合。 它预设了抖动(shake)、闪烁(flash)、弹跳(bounce)、翻转(flip)、旋转(rotateIn/rotateOut)...
  • muduo网络库使用心得

    万次阅读 2012-06-05 21:08:54
    下了mudo使用手册和035版的代码看了下结构,感觉是一个比较成熟而且方便使用的网络。本人手头也有自己的网络,虽然不敢说是一个多强大的网络,但毕竟在外网也稳定运营了几年,多组同时在线也跑过30w左右,单组...
  • 阿里巴巴字体库使用方法

    万次阅读 2017-01-11 15:43:05
    阿里巴巴字体库使用方法阿里巴巴矢量字体库地址: http://www.iconfont.cn/网上看了很多关于字体库的引用,但是还是有很多人在使用时会出现这样那样的问题,所以在这里进行仔细的解释和最后总结.希望对大家有所帮助使用...
  • 动态库使用的几个注意点

    千次阅读 2016-11-13 13:35:18
    一、“--export-dynamic”参数的使用GCC编译可执行文件时可以使用-Wl,--export-dynamic参数,此时链接器产生可执行文件时会将所有全局符号导出到动态符号表。gcc -Wl,--export-dynamic -o p1 p1.c -L. -l0如果在创建...
  • 阿里icon图标库使用说明

    千次阅读 2018-10-16 21:23:51
    之前只会在图标库里把图片下载下来再逐个引用,实在是蠢的不行,mark一下自己的一整个项目的icon如何创建。 1、进入阿里巴巴图标网站http://www.iconfont.cn/ 2、搜索想要的图标 3、选一个需要的图标加入...

空空如也

1 2 3 4 5 ... 20
收藏数 3,147,565
精华内容 1,259,026
关键字:

库的使用