当前位置:   article > 正文

python运行cmd命令的方法_python2.7 执行cmd指令

python2.7 执行cmd指令
运行环境为 Python3
  • 1

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

最硬的调用

import os
os.system("kill task sometask")
  • 1
  • 2

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

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

通过 subprocess 调用

我用这个是失败的的,应该是我的python的环境冲突了,我同时装了2和3.

import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  • 1
  • 2
'
运行

这里通过将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')
  • 1
  • 2
  • 3
'
运行

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')
  • 1
  • 2
  • 3
  • 4
'
运行

最后,再次吐槽,这md的排版也都是够了。我在本地使用其实很正常,上传后就duang,duang,duang了。一脸懵逼

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号