python 调用subprocess communicate

python 调用subprocess communicate,第1张

方法 string dir = basename(fullPath); if(!_fileUtils->isDirectoryExist(dir)) { if(!_fileUtils->createDirectory(dir)) { // Failed to create directory CCLOG("AssetsManagerEx : can not create directory %s\n", fullPathc_str()); un

关于python调用cmd命令,主要介绍两种方式:

一、Python的OS模块

OS模块调用CMD命令有两种方式:ossystem(),ospopen()。 都是用当前进程来调用。

1、ossystem()

a、简单粗暴的执行cmd指令

b、返回结果为0表示执行成功,无法获取命令输出的内容,本在cmd输出的内容会直接在控制台输出。

c、当命令运行结束后接着往下面执行程序(同步阻塞式)。用法如:ossystem("ipconfig")。

2、ospopen()

a、能获取DOS命令输出的内容。

b、ospopen()返回的是一个file对象,那么可以跟打开文件一样 *** 作,r是以读的方式打开。

c、当命令运行结束后接着往下面执行程序(同步阻塞式)。

注意:ospopen() 方法用于从一个命令打开一个读写管道,在Unix,Windows中有效。

用法如:

with ospopen(r"adb devices","r")as f:

    text = fread()

    print(text)# cmd输出结果

二、管道subprocess模块

a、在当前进程下产生子进程。

b、用wait()函数等待结果(异步非阻塞式)。

方法1

result = subprocesscheck_output(r'adb devices') ## 命令执行的输出结果放到了result里

print(result)

方法2

process = subprocessPopen(r'adb devices',shell=True,stdout=subprocessPIPE,stderr=subprocessSTDOUT)

command_output = processstdoutread()decode('gbk')

print(command_output)

Notices: 

有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上

processwait()

我的GitHub

工具/原料

Python环境

方法/步骤

ossystem("The command you want") 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的

ospopen(command[,mode[,bufsize]]),

图中是一个例子

可以看出,popen方法通过pread()获取终端输出,而且popen需要关闭close()当执行成功时,close()不返回任何值,失败

时,close()返回系统返回值 可见它获取返回值的方式和ossystem不同。

使用commands模块,图中是一组例子。根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput, getoutput, getstatus。

但是,如上三个方法都不是Python推荐的方法,而且在Python3中其中两个已经消失。Python文档中目前全力推荐第四个方法,subprocess! subprocess使用起来同样简单:

接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用

shell=True。建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。官方的出发点是好的,不过真心麻烦了很多,

so 如果你更关注命令的终端输出,可以如下图这样 *** 作, 同样很简单

以上就是关于python 调用subprocess communicate全部的内容,包括:python 调用subprocess communicate、如何在Python中执行DOS命令、python怎么执行shell命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10643109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存