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使用Flask框架同时上传多个文件的方法
Mar 21 Python
python自动翻译实现方法
May 28 Python
Python中property属性实例解析
Feb 10 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
python scrapy爬虫代码及填坑
Aug 12 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
德生PL330测评
2021/03/02 无线电
PHP中的类-什么叫类
2006/11/20 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
php基础学习之变量的使用
2011/06/09 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
Express的路由详解
2015/12/10 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Node.js实现文件上传
2016/07/05 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
用python写测试数据文件过程解析
2019/09/25 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
python 实现音频叠加的示例
2020/10/29 Python
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
大学生见习期满自我鉴定
2014/09/13 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
三峡大坝导游词
2015/01/31 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
校园安全学习心得体会
2016/01/18 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS