1. os.popen()

  • os.system(cmd)会直接输出命令的结果到屏幕上,返回一个状态码0或1。
  • os.popen(cmd)会返回一个<open file 'dir', mode 'r' at 0x016AD1D8> file read对象
  • 如果要读取返回的内容,os.popen(cmd).read()进行读取。

2. subprocess(Python3)和commands(Python2)模块

运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。

subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。

Python2中是commands,到Python3中commands模块合并到了subprocess。

3. socket编程思路

TCP服务端:

  1. 创建套接字,绑定套接字到本地IP与端口

    socket.socket()

    s.bind()

  2. 开始监听连接

    s.listen()

  3. 进入循环,不断接受客户端的连接请求

    conn,addr = s.accept()

  4. 然后接收传来的数据,并发送给对方数据

    s.recv()

    s.sendall()

  5. 传输完毕后,关闭套接字

    s.close()

TCP客户端:

  1. 创建套接字,连接远端地址

    socket.socket)

    s.connect()

  2. 连接后发送数据和接收数据

    s.sendall()

    s.recv()

  3. 传输完毕后,关闭套接字

    s.close()

client端

import socket
ip_port = ("localhost",6999) sock_client = socket.socket() sock_client.connect(ip_port) while True: cmd = input(">>>>").strip()
if not cmd:continue
sock_client.sendall(bytes(cmd,encoding="utf-8"))
data = sock_client.recv(1024)
print(str(data,encoding="utf-8")) sock_client.close()

server端

import socket
import subprocess ip_prort = ("localhost",6999) sock_client = socket.socket() sock_client.bind(ip_prort) sock_client.listen(1)
conn, addr = sock_client.accept() while True: print("conn:---->",conn) print("addr:---->",addr) data = conn.recv(1024)
# cmd_status,cmd_result = subprocess.getoutput(data)
# if len(cmd_result) == 0:
# conn.sendall("Done")
# else:
print(data)
conn.sendall(data.upper())
# conn.sendall(bytes(str(data).upper(),encoding="utf-8"))
conn.close()

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #(创建对象)

  • 参数一,地址簇: AF_INET为ipv4地址; AF_INET6为ipv6地址; AF_UNIX只能用于单一的Unix系统连接;
  • 参数二,类型: SOCK_STREAM指tcp协议默认; SOCK_DGRAM指udp; SOCK_RAW原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以,而且SOCK_RAW也可处理特殊的IPv4报文,另利用原始套接字,可通过IP_HDRINCL套接字选项由用户构造IP头;
  • 参数三,协议: 0(默认,与特定的家族相关的协议,若是0系统会根据地址格式和套接类别自动选择一个合适的协议);
  • sock.bind(address) #(将套接字绑定到地址,address的格式取决于地址族,在AF_INET下,以tuple的形式表示地址(IP,port)

Python自动化之socket初识的更多相关文章

  1. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  2. python自动化之BDD框架之lettuce初识问题集

    最近在学习虫师老师编写的python自动化的书.其中讲到了BDD结构lettuce入门一章. 因为是小白,按部就班地进行操作,先不谈执行操作如何,先来讲讲遇到的几个坑,和怎么解决的: 第一坑:pyth ...

  3. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

  4. Day8 - Python网络编程 Socket编程

    Python之路,Day8 - Socket编程进阶   本节内容: Socket语法及相关 SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台 ...

  5. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  6. python自动化开发学习 I/O多路复用

    python自动化开发学习 I/O多路复用   一. 简介 socketserver在内部是由I/O多路复用,多线程和多进程,实现了并发通信.IO多路复用的系统消耗很小. IO多路复用底层就是监听so ...

  7. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  8. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  9. Selenium2+python自动化23-富文本(自动发帖)

    前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...

随机推荐

  1. HTML学习笔记——锚链接、pre标签、实体

    1>锚链接 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  2. 一句SQL实现获取自增列操作

    @@IDENTITY返回最后插入的标识值. 语法@@IDENTITY 返回类型numeric 注释在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语 ...

  3. MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存

    ;Asynchronous Processing=true  不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...

  4. iOS-马上着手开发iOS应用应用程序-第二部分构建应用程序

    第二部分构建应用程序 1,应用程序开发过程 2,设计用户界面 3,定义交互 4,教程:串联图 1,应用程序开发过程 定义概念 设计用户界面 定义交互 实现行为整合数据 对象是应用程序的基石 类是对象的 ...

  5. svn强制解锁的几种做法

    标签: svn强制解锁 2013-12-16 17:40 12953人阅读 评论(0) 收藏 举报  分类: SoftwareProject(23)  版权声明:本文为博主原创文章,未经博主允许不得转 ...

  6. Java多线程编程核心技术---单例模式与多线程

    立即加载/饿汉模式 立即加载就是使用类的时候已经将对象创建完毕. public class MyObject { //立即加载方式==饿汉模式 private static MyObject myOb ...

  7. Cucumber

    http://www.ibm.com/developerworks/library/a-automating-ria/ Cucumber is a testing framework that hel ...

  8. 由Collections.unmodifiableList引发的重构

    原文  http://www.cnblogs.com/persist-confident/p/4516741.html 今天阅读源码的时候,无意中看到了Collections.unmodifiable ...

  9. 【struts2】Result和ResultType

    简单的说,Result是Action执行完后返回的一个字符串,它指示了Action执行完成后,下一个页面在哪里.Result仅仅是个字符串,仅仅是用来指示下一个页面的,那么如何才能够到达下一个页面呢? ...

  10. SVN Tree Conflict 的分析

    所谓Tree Confict,就是至少有一个人修改了目录结构,包括文件或者文件所在目录的改名.删除.移动.然后Update或Merge的时候就报了Tree Conflict. 介绍一下概念Delete ...