首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Python运行shell命令并捕获输出?

从Python运行shell命令并捕获输出?
EN

Stack Overflow用户
提问于 2018-08-27 02:00:28
回答 2查看 0关注 0票数 0

我想编写一个函数来执行shell命令并将其输出作为字符串返回,无论是错误还是成功消息。我只想获得与命令行相同的结果。

什么是代码示例会做这样的事情?

例如:

代码语言:javascript
复制
def run_command(cmd):
    # ??????

print run_command('mysqladmin create test -uroot -pmysqladmin12')
# Should output something like:
# mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists'
EN

回答 2

Stack Overflow用户

发布于 2018-08-27 10:30:55

像这样的东西:

代码语言:javascript
复制
def runProcess(exe):    
    p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      retcode = p.poll() #returns None while subprocess is running
      line = p.stdout.readline()
      yield line
      if(retcode is not None):
        break

注意,我正在将stderr重定向到stdout,它可能不是你想要的,但我也想要错误消息。

这个函数在它们到来时逐行产生(通常你必须等待子进程完成以获得整个输出)。

对于您的情况,用法将是:

代码语言:javascript
复制
for line in runProcess('mysqladmin create test -uroot -pmysqladmin12'.split()):
    print line,
票数 0
EN

Stack Overflow用户

发布于 2018-08-27 11:54:06

Vartec的答案并没有阅读所有内容,所以我做了一个版本:

代码语言:javascript
复制
def run_command(command):
    p = subprocess.Popen(command,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    return iter(p.stdout.readline, b'')

用法与接受的答案相同:

代码语言:javascript
复制
command = 'mysqladmin create test -uroot -pmysqladmin12'.split()
for line in run_command(command):
    print(line)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档