python运行cmd命令的方法

运行环境为 Python3

我工作的python环境是2.7
这一块一般和python装饰器配合使用,python也需要监控某个类或者函数的状态和执行时间。或者直接处理进程,这些函数都比较实用。
我的需求就是在某个指定函数执行完后,将一些进程杀死。这个需求,第一个方法完全就够用了。

最硬的调用

import os
os.system("kill task sometask")

这样就可以调用系统的ls命令了,但是这样没法获取ls的输出。

这个是我的首选,第一是怕麻烦,第二是python2支持的比较好。

通过 subprocess 调用

我用这个是失败的的,应该是我的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 读取命令行的输出

重点就是读取命令行的输出
这个同上。但在我的笔记本环境是正常的。

我们使用 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了。一脸懵逼

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值