python-进程与线程 六

Subprocess 模块:

  作用1:它通过主进程,生成一个子进程,来执行一个操作系统命令,然后返回执行结果。这个结果可以存储到变量里,做后续使用
  作用2:某个命令指向之后的结果,还可以传递给另外一个命令

  在CMD中
 
>>> import os
>>> a = os.system('dir')
 驱动器 C 中的卷是 OS
 卷的序列号是 DC49-453A

 C:\Users\admin\PycharmProjects\test1 的目录

2020/03/27  20:16    <DIR>          .
2020/03/27  20:16    <DIR>          ..
2020/03/27  20:20    <DIR>          .idea
2020/03/26  09:33             1,091 generator.py
2020/03/27  16:31               502 hello.py
2020/03/20  23:16               426 index.html
2020/03/16  08:03    <DIR>          parent_directory
2020/03/27  20:16               270 test1.py
2020/02/11  11:32    <DIR>          venv
2020/03/16  15:16    <DIR>          __pycache__
               4 个文件          2,289 字节
               6 个目录 113,394,843,648 可用字节
>>> a  # 无法获取上面的数据,这时就可以使用Subprocess模块
0

语法

  res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

  cmd:向子进程传入需要执行的shell命令,如 dir

  shell: 是否是shell命令

  stdout=subprocess.PIPE:把结果啊保存到文本中

  stderr=subprocess.STDOUT:把结果打印在屏幕上

例子

import subprocess
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write(b"print(1)\n")
obj.stdin.write(b"print(2)\n")
obj.stdin.write(b"print(3)\n")
obj.stdin.write(b"print(4)\n")
out_info,out_error = obj.communicate()
print(out_info,out_error)

# stdout 和 stderr 和 stdin 的区别
# stdin :标准输入,input
# stdout 标准输出,print 默认输出到屏幕
# stderr 错误输出,默认是输出到屏幕

结果:
b'1\r\n2\r\n3\r\n4\r\n' b''

猜你喜欢

转载自www.cnblogs.com/su-sir/p/12584503.html