Python子进程subpocess原理及用法解析


Posted in Python onJuly 16, 2020

python的子进程嘛,就是利用python打开一个子进程(当然像是一句废话),但是可能和我们理解的不太一样。

一:如何理解?

我们可能的理解:多开一个进程运行某个python函数(如果只想实现这个功能,请使用multiprocessing包)

正确的理解:python通过shell/cmd 打开一个新的程序进程,而不限于python函数,比如我们可以开一个“ls”指令的进程列出当前文件夹下的文件,这个“ls”指令明显是一个shell通用函数,而不是python

函数:

# 打开子进程运行“ls”。输出当前文件夹下文件<br data-filtered="filtered">import subprocess
p = subprocess.run(["ls"])

二. 如何使用?

当我们想单纯地利用subprocess打开一个进程运行python函数的时候,我们甚至要迂回地去做:

比方说这样:

(1)新建一个需要运行的函数脚本 test_print.py

import sys
def print_it(a, b , c):
  print(a)
  print(b)
  print(c)
if __name__ == "__main__":
  print_it(sys.argv[1], sys.argv[2], sys.argv[3])

(2)再建一个脚本,通过传递参数的方式运行 test_print.py

import subprocess


p = subprocess.run(["python", "test_print.py", "a1", "b2", "c3"])
pp = subprocess.run(["python", "test_print.py", "d4", "e5", "f6"])

(3) 输出结果:

a1

b2

c3

d4

e5

f6

三:一些简单用法

1. 比方说重定向输出:

(1)依旧是新建一个需要运行的函数脚本 test_print.py

import sys
def print_it(a, b , c):
  print(a)
  print(b)
  print(c)
if __name__ == "__main__":
  print_it(sys.argv[1], sys.argv[2], sys.argv[3])

(2)再建一个脚本,通过传递参数的方式运行 test_print.py

import subprocess

p = subprocess.Popen(["python", "test_print.py", "a1", "b2", "c3"], stdout=subprocess.PIPE, shell=True) #shell=True 为必须,否则stdout无法读出
pp = subprocess.Popen(["python", "test_print.py", "d4", "e5", "f6"], stdout=subprocess.PIPE, shell=True) 

print(p.stdout.read()) 
print(pp.stdout.read())

然而此时,输出的结果是二进制文件

b'a1\r\nb2\r\nc3\r\n'
b'd4\r\ne5\r\nf6\r\n'

我们需要对此进行处理(当然你不处理也可以,就是看着别扭)

import subprocess
p = subprocess.Popen(["python", "test_print.py", "a1", "b2", "c3"], stdout=subprocess.PIPE, shell=True) #shell=True 为必须,否则stdout无法读出
pp = subprocess.Popen(["python", "test_print.py", "d4", "e5", "f6"], stdout=subprocess.PIPE, shell=True) 
# 用str转化一下就好。
print(str(p.stdout.read(), encoding = "utf8"))
print(str(pp.stdout.read(), encoding = "utf8"))

(3)定向到外部文件

import subprocess
# 注意,此步骤为必须
f_handler=open('out.log', 'w')
p = subprocess.run(["python", "test_print.py", "a1", "b2", "c3"], stdout=f_handler)
pp = subprocess.run(["python", "test_print.py", "d4", "e5", "f6"], stdout=f_handler)# 一个错误用法
p_error = subprocess.run(["python", "test_print.py", "d4", "e5", "f6"], stdout='out.log') # 这样是不行的

我们会发现,屏幕上什么都不会显示,输出结果已经导入到out.log里面了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中print的不换行即时输出的快速解决方法
Jul 20 Python
利用python写个下载teahour音频的小脚本
May 08 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
python里 super类的工作原理详解
Jun 19 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
python redis存入字典序列化存储教程
Jul 16 #Python
Python是怎样处理json模块的
Jul 16 #Python
Python2手动安装更新pip过程实例解析
Jul 16 #Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 #Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 #Python
Python csv文件记录流程代码解析
Jul 16 #Python
Python 抓取数据存储到Redis中的操作
Jul 16 #Python
You might like
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
PHP生成plist数据的方法
2015/06/16 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
使用正则替换变量
2007/05/05 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
JS实现的简单分页功能示例
2018/08/23 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
python实现AES加密与解密
2019/03/28 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
Python实现EM算法实例代码
2020/10/04 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
质量工程师岗位职责
2013/11/16 职场文书
广告语设计及教案
2014/03/21 职场文书
《画家乡》教学反思
2014/04/22 职场文书
教师个人读书活动总结
2014/07/08 职场文书
三国演义读书笔记
2015/06/25 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
Python中tkinter的用户登录管理的实现
2021/04/22 Python
React中的Context应用场景分析
2021/06/11 Javascript
python实现局部图像放大
2021/11/17 Python