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. 【Luogu】P3047附近的牛(树形DP)

    题目链接 树形DP,设f[i][j]是当前在i点,j步之内有多少牛.从相邻点to的f[to][j-1]转移而来,减去重复计算即可. #include<cstdio> #include< ...

  2. localStorage的用法

    1.在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,前者是一直存在本地的,后者是伴随着session,窗口一旦关闭就消失了.二者用法完全相 ...

  3. hihoCoder #1161 八卦的小冰

    题目大意 考虑一个由 $n$ 个人构成的社交网络,其中任意两人都有一个用非负整数表示的亲密度. 初始时给出 $m$ 对人的亲密度,其余的亲密度为 $0$ . 定义此社交网络的「八卦度」为异性之间的亲密 ...

  4. 周赛Problem 1025: Hkhv love spent money(RMQ)

    Problem 1025: Hkhv love spent money Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger ...

  5. RestAssured打印日志到文件中的方法

    参考https://stackoverflow.com/questions/14476112/how-to-get-rest-assured-log-into-something-printable- ...

  6. poj 3293 Rectilinear polygon

    Rectilinear polygon Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2125   Accepted: 24 ...

  7. css3 boxing-sizing属性

    boxing-sizing: 1.content-box 计算宽度不包含padding和border宽度 2.border-box border和padding计算入width之内 3.padding ...

  8. input弹出的手机键盘搜索事件

    一.input的搜索框    在input标签里面把type设置为search就可以了.弹出的手机键盘回车键也会变成搜索或者是搜索的图标. <input id="search" ...

  9. 電池的標稱電壓 與 power consumption 量測

    電池標稱電壓 定義如下圖, 以25度為例,20度再往上點, 4V 放一下電就往下掉, 3V 放一下電就往下掉, 假設 3.8V 是擁有最多 capacity 可以 discharge 的電壓,放電放了 ...

  10. Linux 之 LNMP服务器搭建-Nginx

    LNMP服务器搭建-Nginx 参考教程:[千峰教育] 系统版本: CentOS 6.8 关闭防火墙和Selinux service iptables stop setenforce 安装Nginx ...