python--网络编程--主机命令执行
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--网络编程--主机命令执行的更多相关文章
- Python网络编程——主机字节序和网络字节序之间的相互转换
If you ever need to write a low-level network application, it may be necessary to handle the low-lev ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Python 网络编程相关知识学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 28、Python网络编程
一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...
- python 网络编程:socket(二)
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
随机推荐
- cf- 297 < b > -- 区间翻转操作的优化
B. Pasha and String time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 刷题总结——Tree chain problem(HDU 5293 树形dp+dfs序+树状数组)
题目: Problem Description Coco has a tree, whose vertices are conveniently labeled by 1,2,…,n.There ar ...
- Failed to apply plugin [id 'com.gradle.build-scan']
把spring源码clone下来之后,使用gradle编译不通过,异常日志如下: FAILURE: Build failed with an exception. * Where: Build fil ...
- Gcd(bzoj 2818)
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...
- linux 目标文件调试
前言如果普通编程不需要了解这些东西,如果想精确控制你的对象文件的格式或者你想查看一下文件对象里的内容以便作出某种判断,刚你可以看一下下面的工具:objdump, nm, ar.当然,本文不可能非常详细 ...
- 关于unity3d插件的自动打包
开发中,迩可能会遇到在xcode里添加一些需要调用原生api的方法,可能是game center,可能是内购之类的,但是这些插件实在太多了,所以迩大可不必自己写这些插件,问题在于,国内的一些插件,像9 ...
- Mac 下安装Ant
转自:http://blog.csdn.net/crazybigfish/article/details/18215439 如果你不知道什么是ant,请不要浪费你的时间继续读下去了.或者你对ant是什 ...
- Laravel 5.1 框架返回状态拦截
Laravel 5.1 返回信息状态拦截 可以在app\Exceptions\Handler.php文件中修改, public function render($request, Exception ...
- consul UI用127可以访问,指定ip无法访问
./consul agent -dev 只能127.0.0.1可以访问 ./consul agent -dev -client 0.0.0.0 -ui 指定ip可以访问
- Oracle单个datafile大小的限制
http://blog.itpub.net/30776559/viewspace-2146790/