赞
踩
运行环境为 Python3
我工作的python环境是2.7
这一块一般和python装饰器配合使用,python也需要监控某个类或者函数的状态和执行时间。或者直接处理进程,这些函数都比较实用。
我的需求就是在某个指定函数执行完后,将一些进程杀死。这个需求,第一个方法完全就够用了。
import os
os.system("kill task sometask")
这样就可以调用系统的ls命令了,但是这样没法获取ls的输出。
这个是我的首选,第一是怕麻烦,第二是python2支持的比较好。
我用这个是失败的的,应该是我的python的环境冲突了,我同时装了2和3.
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
这里通过将stdout重定向到subprocess.PIPE上来取得ls命令的输出,如果想将stderr也重定向到subprocess.PIPE上,stderr=subprocess.STDOUT改成stderr=subprocess.PIPE即可。
重点就是读取命令行的输出
这个同上。但在我的笔记本环境是正常的。
我们使用 subprocess 执行命令行后,可以通过process.stdout.read()来读取命令行输出,不过process.stdout.read()返回的是bytes,要想取得str,可以直接调用process.stdout.read().decode(‘utf-8’)。
最终的代码大概是这样的
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
command_output = process.stdout.read().decode('utf-8')
Notices:
有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上process.wait()
并发的毛病,需要等待,参数需要有stdout和stderr。(java也有类似的机制)
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
process.wait()
command_output = process.stdout.read().decode('utf-8')
最后,再次吐槽,这md的排版也都是够了。我在本地使用其实很正常,上传后就duang,duang,duang了。一脸懵逼
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。