import os
os.system()#执行系统命令
#只能执行命令不能返回值
import subprocess # 能执行系统命令
res=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #第一个参数是执行命令的字符串形式,第二个是shell=True代表使用命令解释器
#PIPE是subprocess提供的一个功能,管道。可以让结果不打印存在管道里面
print(res.stdout.read().decode('gbk'))#用stdout正确输出管道,read管道里面的数据

windows里面是gbk格式的所以要转gbk
stderr是错误的结果 stdout是正确的结果
如果想让用户错误和正确的结果都可以看见的话要建立两个管道一个正确的一个错误的
命令正确的话就进入正确管道stdout拿取结果
如果命令错误的话就进入错误的管道stderr拿取结果
命令中如何使用管道:
要查看windows中都开了哪些任务命令:tasklist
如果想看看是不是运行了pycharm或者别的程序:findstr pycharm
程序中:tasklist ! findstr pycharm     感叹号就是管道
有管道tasklist会将结果暂存在管道中,然后由findstr pycharm来循环判断
还有一种管道:

import subprocess
subprocess.Popen('dir',shell=True,stdin=subprocess.PIPE)#也是一个管道

如果在输入命令时最大recv是1024  像tasklist之类的命令数据太多,如果取出数据大于1024
那么管道内的数据无法完全取出。接下来再输入命令取出的管道内的数据还是之前命令的那样命令就会乱
SOCK_STREAM流式协议就是TCP协议
TCP使用了nagle算法,将多次间隔较小且数据量小的数据,合并成一个大数据发出去
所以会有粘包现象,所以上面取出数据,是因为粘包了分不清谁是谁。
socket里面推荐使用 from socket import *
粘包现象发送端和服务端都会粘包
服务端接收的少了剩下的会留在那粘包,下次再继续接受
客户端发送的太多了也会粘包。
发送数据长所以要把长度发在前面,关键点在于recv收的量,高速长度就可以解决接受的问题
但是一次传进来的太大,大过了系统内存就无法存了,所以需要一次一次边传数据边写数据,循环接受
下载文件就是打开文件将文件数据传给接收端再写新文件写入的过程

先收报头,固定报头的bytes 然后确定长度
得让接收端知道多少的bytes是我的报头没所以报头固定长度。
要用到struct模块
struct.pack('i',123456),括号内i是整型,将后面整型的数据打包成一个bytes格式
固定长度是4所以可以用这个模块固定报头的长度
struct.unpack('i',收到的) 解包,将打包时候的数据接收了解包出来。取出来是个元祖
第一个数据就是打包的所以索引0直接取

因为struct.pack  的i格式打包不了  报头要传的数据很多
所以要用字典的方法来打包报头

python--网络编程--主机命令执行的更多相关文章

  1. Python网络编程——主机字节序和网络字节序之间的相互转换

    If you ever need to write a low-level network application, it may be necessary to handle the low-lev ...

  2. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  3. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  4. Python 网络编程相关知识学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  5. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  6. 28、Python网络编程

    一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...

  7. python 网络编程:socket(二)

    上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall         ret = send('safagsgdsegsdgew') #send 发送 ...

  8. Python 网络编程(二)

    Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...

  9. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

随机推荐

  1. BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法

    注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...

  2. Java面试题之多线程同步和互斥有几种实现方法,都是什么?

    线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另外一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. 线程互斥是指对于共享的进程系统资源,每个线程访问时的排他 ...

  3. Java-约瑟夫问题(Josephus Problem)

    题目: 据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方 ...

  4. 【CF711C】Coloring Trees(DP)

    题意:给你n个数字,一共有m种,如果某数为0则该数为空,空的地方可以填任意种类数,但每填一个数字都要花费一定的费用, 从头到尾,所有相邻且相同的数字看作一个集合,求使n个数字的集合数为k所需的最小费用 ...

  5. Linux 设备驱动的固件加载【转】

    转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...

  6. CI安全

    URI安全,CodeIgniter 严格限制 URI 中所能包含的字符,以此帮助你设计的程序减少被恶意数据入侵的可能.URI 一般只包含下列内容: 字母和数字(Alpha-numeric text) ...

  7. js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示

    本文本内容拷贝至:https://blog.csdn.net/xuanwuziyou/article/details/48199123 当一个网页中有大量图片时,浏览器会逐个去下载这些图片,等全部下载 ...

  8. Codeforces 597B Restaurant(离散化 + 贪心)

    题目链接 Restaurant 题目意思就是在$n$个区间内选出尽可能多的区间,使得这些区间互不相交. 我们先对这$n$个区间去重. 假如有两个区间$[l1, r1],[l2, r2]$ 若满足$l1 ...

  9. Codeforces 835F Roads in the Kingdom (环套树 + DP)

    题目链接 Roads in the Kingdom 题意  给出一个环套树的结构,现在要删去这个结构中的一条边,满足所有点依然连通. 删边之后的这个结构是一棵树,求所有删边情况中树的直径的最小值. 显 ...

  10. guava之cache

    转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = Cach ...