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里面了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章