python调用linux系统api - CSDN
精华内容
参与话题
  • Python调用API接口的几种方式 转自 one_day_day… 相信做过自动化运维的同学都用过API接口来完成某些动作。API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课。 本文主要...

    Python调用API接口的几种方式

    转自 one_day_day…

    相信做过自动化运维的同学都用过API接口来完成某些动作。API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课。

    本文主要介绍python中调用API的几种方式,下面是python中会用到的库。

    • urllib2

    • httplib2

    • pycurl

    • requests

    urllib2

    import urllib2, urllib
    github_url = ‘https://api.github.com/user/repos
    password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_manager.add_password(None, github_url, ‘user’, ‘*‘)
    auth = urllib2.HTTPBasicAuthHandler(password_manager) # create an authentication handler
    opener = urllib2.build_opener(auth) # create an opener with the authentication handler
    urllib2.install_opener(opener) # install the opener…
    request = urllib2.Request(github_url, urllib.urlencode({‘name’:’Test repo’, ‘description’: ‘Some test repository’})) # Manual encoding required
    handler = urllib2.urlopen(request)
    print handler.read()
    2. httplib2

    import urllib, httplib2
    github_url = ’
    h = httplib2.Http(“.cache”)
    h.add_credentials(“user”, “**“, ”
    data = urllib.urlencode({“name”:”test”})
    resp, content = h.request(github_url, “POST”, data)
    print content
    3. pycurl

    import pycurl, json
    github_url = ”
    user_pwd = “user:*
    data = json.dumps({“name”: “test_repo”, “description”: “Some test repo”})
    c = pycurl.Curl()
    c.setopt(pycurl.URL, github_url)
    c.setopt(pycurl.USERPWD, user_pwd)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.POSTFIELDS, data)
    c.perform()
    4. requests

    import requests, json
    github_url = ”
    data = json.dumps({‘name’:’test’, ‘description’:’some test repo’})
    r = requests.post(github_url, data, auth=(‘user’, ‘*‘))
    print r.json
    以上几种方式都可以调用API来执行动作,但requests这种方式代码最简洁,最清晰,建议采用。

    本文出自 “Linux和网络” 博客,转载请与作者联系!

    展开全文
  • 最近在考虑一个很鸡肋的东西,如果一个python程序对身份要求很高,需要系统级别的用户认证才能进行访问,那么如何设计编写这样一个认证接口?于是便有了下文。

    【P.S.】使用python版本为2.7~py3有点小惊喜哦(我不写C,原因暂不深究了)
    1.一个基本用户验证接口无非包括两点:用户名、密码
    2.在密码部分还需要考虑输入不显示提高安全性

    大体只要实现这两点功能,乞丐版功能便做完了。

    对于第一点:
    Linux系统的用户及认证信息,保存在passwd和shadow文件中,可以轻易通过遍历文件内容行对用户名进行辨别,当然,也可以使用python内置模块pwd对用户名进行辨别。不幸的是,Linux中的密码字段的信息是加密的,在文件中体现的形式要么是一个x字符,要么是一个哈希值。获取正确密码对输入密码做匹配成了重中之重。首先可以明确,获取正确的明文密码是肯定不可能的。一开始自然以为可以通过查找官方文档找到对应的摘要算法对输入的密码进行摘要对比就可以了,但实际上也是不可能的。Linux生成的密码摘要并不是单纯的密码字符的摘要,是密码字符串加一个随机的salt字符串一起进行hash,so,放弃吧。
    通过查找Linux相关资料,看到《UNIX高级编程》这么个宝贝,虽然不会写C,但是乍一看发现Linux是有库支持将输入字符串hash的,只要再跟正确密码hash值一对比就可以了。于是思路清晰,python跟C混编,通过调用C动态链接库调用系统接口。

    对于第二点
    输入密码不显示以提高安全性,可以通过python内置的getpass模块实现。

    上代码:(●ˇ∀ˇ●)

    [C接口文件:auth.c]
    // Author: BaoJunxian
    // Date: 2018/11/29
    #include <shadow.h>
    
    // Call Format: auth(<user>, <passwd>)
    // Return 0 if success.
    int auth(char *user, char *passwd){
        char *obtpwd;
        struct spwd *spasswd;
    
        spasswd = getspnam(user);
        obtpwd = crypt(passwd, spasswd->sp_pwdp);
        if(strcmp(spasswd->sp_pwdp, obtpwd) == 0)
        return 0;
        else return 1;
    }
    

    注意:
    执行命令gcc -o auth.so --shared -fPIC auth.c -lcrypt生成用户验证使用的动态链接库文件auth.so

    [python程序文件:login.py]
    # coding=utf-8
    # Author : BaoJunxian
    # Date : 11/29/18
    
    import ctypes, pwd, getpass
    cAPI = ctypes.cdll.LoadLibrary
    lib = cAPI('./auth.so')
    
    def login():
        user = raw_input('User:').strip()
        try:
            pwd.getpwnam(user)[0]
        except KeyError:
            print('User not existed.')
            return False
        for i in range(3):
            passwd = getpass.getpass('password:')
            if not lib.auth(user,passwd):
                break
            print('Password not correct.')
        else:
            print('Log in failed.')
            return False
        print('Login successfully.')
        return True
    
    if __name__ == '__main__':
        login()
    

    如此便大功告成,来验证一下:

    [root@kilo-k5-controller test]# python login.py
    User:re
    User not existed.
    [root@kilo-k5-controller test]# python login.py
    User:root
    password:
    Password not correct.
    password:
    Password not correct.
    password:
    Password not correct.
    Log in failed.
    [root@kilo-k5-controller test]# python login.py
    User:root
    password:
    Login successfully.
    

    功能完好,perfect!

    展开全文
  • 如何调用Linux命令 下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的: import commands exitcode,result =...

    如何调用Linux命令

    下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的:


    import commands


    exitcode,result = commands.getstatusoutput('dir')


    print "exitcode: %s" %(exitcode)


    print "result: %s" %(result)


    命令行交互

    文件访问

    文件读写

    经常在网上复制代码块时,会将行号也复制下来, 为了去掉前面的行号,可以使用以下python脚本,这个脚本演示从一个文件读入,稍加处理写入到另一个文件:


    import os  

    import string  

    import re  

    import sys  

    args = sys.argv  


    infile=open(args[1],'r')  


    outfile=open(args[2],'w')  


    readline=infile.readlines()  


    infile.close()  


    for i in xrange(len(readline)):  


            line = readline[i]  


            line = line.strip()  


            strlist = line.split(' ')  

            del strlist[0]  

            line = ' '.join(strlist)  

            outfile.write(line + '\n')  

    outfile.close()

    检测目录与文件

    if os.path.exists("./setqt4env"):

            print "found!"

    网络访问

    http get

    通过网址抓内容,设置了30秒延时


    import socket

    import sys

    import urllib

    socket.setdefaulttimeout(30)

    try: 

        resp = urllib.urlopen("http://www.baidu.com")

    except Exception, info:

      print "Error '%s'" % (info[0])

    else:

        print (resp.read())

    ftp get

    自动ftp


    from ftplib import FTP


    ftp = FTP('192.168.1.61')


    ftp.login('user','password')


    ftp.retrbinary('RETR readme.txt', open("readme.txt", "wb").write)


    ftp.quit()

    调用C/C++

    写一个c++文件api.cpp:


    #include <Python.h>

    class MyClass {

    public:

        int add(int x,int y) { return x+y; }

    };

    extern "C" int add(int x,int y)

    {

        MyClass obj;

        return obj.add(x,y);

    }

    将c++编译成动态库:


    g++ -fPIC api.cpp -o api.so -shared -I/usr/include/python2.7 -I/usr/lib/python2.7/config

    在python中调用add函数:


    import ctypes

    plib = ctypes.CDLL('/tmp/api.so')

    print "result: %d" %(plib.add(1,2))

    系统调用

    虽然需求好像有点“过份”,但是强大的python是可以调用诸如ioctl这类的Linux系统调用的, 以下的例子是让蜂鸣器响:


    import fcntl

    fd = open('/dev/pwm', 'r')

    fcntl.ioctl(fd, 1, 100)

    等效于以下c代码


    int fd = open("/dev/pwm", O_RDONLY);

    ioctl(fd, 1, 100);

    IDE

    我只用过 PyCharm,跨平台的, 由于不做大型的开发,所以我只试用了基本的功能,例如:


    可以直接在界面上运行,无需切换到终端敲命令

    敲代码时有智能完成

    即时的语法检查

    光有这些就比一般的编辑器好太多了。

    Killer Apps

    Zope

    Zope是一个开源的web应用服务器,主要用python写成。它是一个事务型的对象数据库平台 Zope的管理面板首页Zope除了能储存内容,数据外,还能存放动态的HTML模板、脚本、搜索引擎、关系数据库管理系统(RDBMS)接口和代码。zope里的一切都是对象。它有一个强大的基于web的在线开发模板,使你能在世界上任何地方,任何时间方便地更新你的网站。

    1). commands.getstatusoutput(cmd)


    用os.popen()执行命令cmd, 然后返回两个元素的元组(status, result). cmd执行的方式是{ cmd ; } 


    2>&1, 这样返回结果里面就会包含标准输出和标准错误.



    2). commands.getoutput(cmd)


    只返回执行的结果, 忽略返回值.



    3). commands.getstatus(file)


    返回ls -ld file执行的结果.



    看一下这些函数使用的例子:


    >>> import commands


    >>> commands.getstatusoutput('ls /bin/ls')


    (0, '/bin/ls')


    >>> commands.getstatusoutput('cat /bin/junk')


    (256, 'cat: /bin/junk: No such file or directory')


    >>> commands.getstatusoutput('/bin/junk')


    (256, 'sh: /bin/junk: not found')


    >>> commands.getoutput('ls /bin/ls')


    '/bin/ls'

    >>> commands.getstatus('/bin/ls')


    '-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'










    本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1627308,如需转载请自行联系原作者
    展开全文
  • 两步解决python调用Matlab的脚本和函数文件

    万次阅读 多人点赞 2020-08-09 21:52:37
    谢谢~http://blog.csdn.net/sunny_xsc1994/article/details/79254196很早之前写了一篇《python调用matlab环境配置》有关通过mlab实现python调用matlab的配置,但是只在windows下成功了,在Linux下一直没成功,后来...

     

    博主欢迎转载,但请一定要给出原文链接,标注出处!!!谢谢~

    http://blog.csdn.net/sunny_xsc1994/article/details/79254196

     

    (没想到这篇也那么多浏览记录,由于CSDN不常登陆,所以评论不一定及时回复。大家如果用知乎的话,可以知乎私信我:Sunny.夏的知乎个人主页。我看到消息肯定会及时回复大家的。对于那些评论了几个月博主都没回的,实在抱歉,千万别拿大刀砍我。。。我是真的不常登,只有在写文章的时候才会登下博客)

    很早之前写了一篇《python调用matlab环境配置》有关通过mlab实现python调用matlab的配置,但是只在windows下成功了,在Linux下一直没成功,后来发现一个很简单的配置方法,一直想写的没写上,今天抽空就把它给补充完整好了。

    本文的配置方法Windows,Mac和Linux系统均适合。

    一.安装MATLAB Engine API for python

    install MATLAB Engine API for Python

    Windows系统

    cd "matlabroot\extern\engines\python"
    python setup.py install

    Mac or Linux系统

    cd "matlabroot/extern/engines/python"
    python setup.py install

    这里的"matlabroot"是你matlab所在的安装路径,注意,上面两个地址中的反斜杠是不同的。
     

    二.用Python调用脚本或者函数

    Call User Script and Function from Python

     

    脚本

    在当前目录下,MATLAB建立triarea.m脚本文件,内容如下

    b = 5;
    h = 3;
    a = 0.5*(b.* h)

    然后同目录下新建一个test.py,内容如下

     

    import matlab.engine
    eng = matlab.engine.start_matlab()
    eng.triarea(nargout=0)

     

     

    函数

    MATLAB建立一个function文件,内容如下:

    function a = triarea(b,h)
    a = 0.5*(b.* h);

    同样,test.py修改如下:

    import matlab.engine
    eng = matlab.engine.start_matlab()
    ret = eng.triarea(1.0,5.0)
    print(ret) # 2.5

     


    是不是觉得特别方便?惊不惊喜,意不意外,枉费我之前用mlab时在windows下配置了那么多,后来在Linux下没成功的时候,无意间就发现了这个方法。
     

     

    展开全文
  • Python调用win32api

    万次阅读 2014-03-11 21:39:11
    首先安装Python, 我安装的是Python2.7 其次就是安装Pywin32, 在http://sourceforge.net/projects/pywin32/files/pywin32/ 就可以下载到。 注意第一点就是这里的版本是要和python的版本相依赖的,我下载的是...
  • Linux中使用Python模拟键盘按键

    万次阅读 2013-11-01 10:57:10
    之前在做自动化测试中需要用Pythonlinux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperclip这两个python库,但打开对话框后调用粘贴API无法进行粘贴,不知道为什么。 然后发现了virtkey这个库...
  • python 调用Google Translate API进行翻译

    万次阅读 2016-05-02 20:54:44
    调用Google 翻译API进行翻译
  • Python3.6.2调用ffmpeg

    万次阅读 2017-09-16 11:25:50
    Python3.6.2调用C语言写的库
  • Github 项目 - OpenPose Python API

    千次阅读 2019-05-30 21:47:02
    OpenPose 的 Python 模块提供了 Python API,可以用于构建 OpenPose 类(class),其输入是 numpy array 格式的图像,并得到 numpy array 格式的 Pose 位置估计. 该 Python API 还提供了直接从网络(network)得到的 ...
  • 使用libusb和hidapi实现hid通信

    千次阅读 2018-06-19 17:43:34
    使用libusb可以实现通用的usb通信,但是实现较为复杂,可以使用hidapi来封装一层,通过hidapi调用libusb。 具体流程如下: 1、编译libusb 下载地址:...
  • 客户端,Windows,python 3.5,PyCharm 服务器端,CentOS7.2,docker 18.09.0 一、docker开放远程连接,修改/usr/lib/systemd/system/docker.service文件。 vim /usr/lib/systemd/system/docker.service 在文件中...
  • Python 3(11)调用系统命令行

    万次阅读 2018-02-22 11:49:42
    Python3 入门专栏http://blog.csdn.net/column/details/19679.html调用 OS 命令行python调用 os 的命令行,有以下几方法:os.system(command)类似 C 中的 system() 函数,command 为os命令;返回值在不同os上不同...
  • Golang调用Python

    万次阅读 2017-07-06 13:29:31
    Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 ![干他一炮.jpg](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/f5ad9d2dbd36c3
  • Python调用(运行)外部程序

    万次阅读 2013-04-10 11:39:24
    Python调用(运行)外部程序 在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码。为了更好地控制运行的进程,可以...
  • c++调用tensorflow

    万次阅读 热门讨论 2020-08-21 11:53:33
    但是目前绝大部分的python都是拥有着丰富的pythonAPI,而c++的API不够完善。这就导致绝大多是使用tensorflow的项目都是基于python。 如果项目是由c++编写,想调用python下的tensorflow?可参考本教程(tensorflow...
  • ShellExecute 与 CreateProcessShellExecuteShellExecute(hwnd, op , file , params , dir , bShow ) 其参数含义如下所示。 hwnd:父窗口的句柄,如果没有父窗口,则为0。 op:要进行的操作,为“open”、“print...
  • Ubuntu安装pycocotools

    万次阅读 2018-05-04 17:17:15
    导言 最近在实现Mask R-CNN,为了实现在MS COCO数据集上训练和测试数据,需要安装pycocotools。记录安装过程和遇到的问题。 一、MS coco数据集 Microsoft COCO 数据集(也称为Ms coco数据集):微软团队的,一个...
  • Python中CDLL加载dll后,如何释放

    千次阅读 2012-12-10 15:03:48
    python调用dll的方法时,使用ctypes的CDLL还是比较方便的,但是刚开始查找释放函数时,发现windll中没有FreeLibrary方法 后发现win32api中含有此方法,将CDLL构造出的实例直接传入,发现报错 仔细...
  • Python如何调用C语言接口

    千次阅读 2014-12-28 11:08:42
    不说太多废话,提高本文使用性。
  • Linux定时运行Python脚本

    万次阅读 2018-03-09 17:36:01
    Linux–CentOS定时运行Python脚本 最近公司的项目开始进入运营阶段,数据库的记录也开始多了起来。看了postgresql的自动清理好像不太符合需求,暂定对接口请求记录表保留3个月内的记录,既然postgresql不支持那就...
1 2 3 4 5 ... 20
收藏数 47,062
精华内容 18,824
热门标签
关键字:

python调用linux系统api