subprocess

再次复习python

橙三吉。 提交于 2020-02-09 21:26:10
python文件操作   r 只读 w 只写(同名直接覆盖) a 是w的升级版,实在同名文件中继续写,不会重写文件 r + 可读可写 序列化:变量都存在内存中,如果将变量转换成可储存可传输的过程就叫序列化; import json d = dict(name='fan', age=13) f = json.dumps(d) #序列化为json对象 print(type(f)) #<class 'str'> g = json.loads(f) #反序列化为python识别的对象 print(g) #{'name': 'fan', 'age': 13} print(type(g)) #<class 'dict'> class Student(object): def __init__(self, name, age, score): self.name = name self.age = age self.score = score s = Student('fan', 28, 99) def myfun(stu): return { 'name': stu.name, 'age': stu.age, 'score': stu.score } print(json.dumps(s, default=myfun)) #序列化python实例时,无法识别实例

04python 黏包(python网络编程)

╄→尐↘猪︶ㄣ 提交于 2020-02-08 05:04:30
什么叫做黏包? 先写一个小补充: encode()函数、decode()函数: encode() 是将数据类型转换成bytes类型decode()是将bytes类型转换成其他类型encode() 叫做编码, decode( ) 叫做解码 通过一段代码来引出黏包现象(基于TCP的网络通信) sever端 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8080)) sk.listen() conn, addr = sk.accept() while True: cmd = input('>>>') conn.send((cmd.encode('utf-8'))) # 将输入的数据转换层(utf-8)的bytes类型,用于网络传输 ret = conn.recv(1024).decode('utf-8') # 将接收到的数据(utf-8)的bytes类型数据,解码成本身的数据类型 print(ret) conn.close() sk.close() 19 1 import socket 2 3 4 sk = socket.socket() 5 sk.bind(('127.0.0.1', 8080)) 6 sk.listen() 7 8 conn, addr = sk.accept() 9 10 while True:

Python进程-实现

萝らか妹 提交于 2020-02-08 03:16:51
fork介绍 Unix/Linux操作系统提供了一个 fork() 系统调用,它非常特殊。普通的函数调用,调用一次,返回一次, 但是 fork() 调用一次,返回两次,因为操作系统 自动把当前进程(称为父进程)复制了一份( 称为子进程) ,然后,分别在父进程和子进程内返回。 子进程永远返回 0 ,而父进程返回子进程的ID 。这样做的理由是,一个父进程可以fork出很多子进程,所以, 父进程要记下每个子进程的ID,而子进程只需要调用 getppid() 就可以拿到父进程的ID。 Python的 os 模块封装了常见的系统调用 import os if __name__ == '__main__': print('进程 (%s) start...' % os.getpid()) pid = os.fork() # time.sleep(10) if pid == 0: # 子进程fork()返回0 print("子进程{},父进程{}".format(os.getpid(), os.getppid())) else: # 父进程fork返回子进程的id print("父进程{},子进程{}".format(os.getpid(), pid)) --》》结果 进程 (3130) start... 父进程3130,子进程3131 子进程3131,父进程3130

使用 Python 在 Linux 上实现一键回归测试

时间秒杀一切 提交于 2020-02-07 11:30:34
从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动化。当然 Pexpect 也可以用来和 ssh、ftp、passwd、telnet 等命令行进行自动化交互。这里我们以 CVS 为例展示如何利用 Pexpect 从代码库迁出代码。 清单 1. 用 pexpect 迁出代码库代码 try : chkout_cmd = 'cvs co project_code' #从代码库迁出 project_code 的内容 child = pexpect . spawn ( chkout_cmd ) child . expect ( 'password:' ) child . sendline ( 'your-password' ) #请替换"your-password"为真实密码 child . interact ( ) except : pass #忽略迁出代码中的错误 在清单 1 中,我们用命令”cvs co project_code”从代码库中迁出了 project_code 的内容,我们也可以用该命令来更新已经迁出的代码。只需要将命令”cvs update” 传给类 pexpect.spawn()即可,详细的实现请参考代码文件。这里

TypeError: type str doesn't define __round__ method

℡╲_俬逩灬. 提交于 2020-02-05 03:49:02
一开始把我给唬住了,后来发现是基础问题, 最终结果如下: #!/usr/bin/env python3 # -*- coding:utf-8 -*- import subprocess def collect(): filter_keys = ['Manufacturer', 'Serial Number', 'Product Name', 'UUID', 'Wake-up Type'] raw_data = {} for key in filter_keys: try: res = subprocess.Popen("sudo dmidecode -t system|grep '%s'" % key, stdout=subprocess.PIPE, shell=True) result = res.stdout.read().decode() data_list = result.split(':') if len(data_list) > 1: raw_data[key] = data_list[1].strip() else: raw_data[key] = '' except Exception as e: print(e) raw_data[key] = '' data = dict() data['asset_type'] = 'server' data[

常用模块三

牧云@^-^@ 提交于 2020-02-04 09:25:35
configparser模块:解析配置文件   --可以读、写、修改出配置文件中的内容   --想要对文件进行操作,必须先读出配置文件(c.read()) #1、 创建解析对象 c = configparser.ConfigParser() c.read('文件地址',encoding='utf-8')   -->读取指定文件的配置   -->如果文件不存在,也不会报错 #2、获取配置项 count = c.get('section','option') #取出分区里面选项后面的值,读出来都是字符串   --section:分区名称   --option:选项名称 count = c.getint('section','option') #取出分区里面选项的值并且转换成int类型                #getfloat()转换成浮点型 getboolean()转换成布尔类型 #3、c.add_section('分区名') #添加分区名 #4、c.section()  -->查看所有的分区    c.option(’section‘)   -->查看某个分区里面的所有选项 #5、c.set('section','option',value=None)   --为某个分区添加选项并且赋值,如果分区不存在就会报错 #6、c.write('fp')  -->括号里是文件对象

Automate stdin with Python using stdin.write()

北城余情 提交于 2020-02-03 01:44:29
问题 I am trying to automate the setup of generating self-signed SSL certificate. This is my code: #!/usr/bin/env python import subprocess pass_phrase = 'example' common_name = 'example.com' webmaster_email = 'webmaster@example.com' proc = subprocess.Popen(['openssl', 'req', '-x509', '-newkey', 'rsa:2048', '-rand', '/dev/urandom', '-keyout', '/etc/pki/tls/private/server.key', '-out', '/etc/pki/tls/certs/server.crt', '-days', '180'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess

Python调用系统命令的6种方法

情到浓时终转凉″ 提交于 2020-02-02 16:36:41
Python调用系统命令的6种方法 在Python中调用系统命令一般使用os或者subprocess模块,下面介绍Python中最常用的6种调用系统命令的方法。 1、os.system() 该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作: 1、fork一个子进程; 2、在子进程中调用exec函数去执行命令; 3、在父进程中调用wait(阻塞)去等待子进程结束。 返回0表示命令执行成功,其他表示失败。 用法: os.system("command") 2、os.popen() 这种调用方式是通过管道的方式来实现,函数返回是 file read 的对象,对其进行读取read、readlines等操作可以看到执行的输出。 用法: os.popen("command") 3、subprocess.Popen() subprocess模块被推荐用来替换一些老的模块和函数,如:os.system、os.spawn 、os.popen 等 subprocess模块目的是fork一个新的进程并与之通信,最常用是定义类Popen,使用Popen可以创建进程,并与进程进行复杂的交互。 用法: child = subprocess.Popen(["cmd","arg1"...]) 4、subprocess.call() 执行指定的命令,返回命令执行状态

How to kill a subprocess in python

独自空忆成欢 提交于 2020-02-02 14:48:46
问题 I have code which runs a webcamera on a linux pc using the gst-launch command. When I kill the process, the webcamera window does not turn off, but the program stops running. I want the webcamera window also to be closed. Can you help me on this? import subprocess import time import os import signal cmd = "gst-launch-1.0 -v v4l2src ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink" process = subprocess.Popen(cmd, shell = True) time.sleep(5) #print(subprocess.Popen.pid) #process

Python asyncio subprocess write stdin and read stdout/stderr continuously

五迷三道 提交于 2020-02-01 05:07:26
问题 I'm currently on a task with subprocess in python3 asyncio. My code is simply write to stdin and read stdout/stderr simultaneously: import asyncio async def read_stdout(stdout): print('read_stdout') while True: buf = await stdout.read(10) if not buf: break print(f'stdout: { buf }') async def read_stderr(stderr): print('read_stderr') while True: buf = await stderr.read() if not buf: break print(f'stderr: { buf }') async def write_stdin(stdin): print('write_stdin') for i in range(100): buf = f