猿问

运行shell命令并捕获输出

运行shell命令并捕获输出

我想编写一个函数,它将执行shell命令并返回其输出。如一串不管是错误还是成功的信息。我只想得到与命令行相同的结果。

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

例如:

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'


收到一只叮咚
浏览 1440回答 4
4回答

子衿沉夜

这要容易得多,但只适用于Unix(包括Cygwin)。import commandsprint commands.getstatusoutput('wc -l file')它返回一个元组,其中包含(RETURE_VALUE,输出)这只适用于python2.7*在python3..对于在这两种情况下都有效的解决方案,请使用subprocess模块相反:import subprocess output=subprocess.Popen(["date"],stdout=PIPE)response=output.communicate()print response

繁花如伊

就像这样:def runProcess(exe):         p = subprocess.Popen(exe, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)     while(True):         # returns None while subprocess is running         retcode = p.poll()          line = p.stdout.readline()         yield line        if retcode is not None:             break注意,我将stderr重定向到stdout,它可能不是您想要的,但我也需要错误消息。本函数一条接一条的收益(通常,您必须等待子进程完成,才能获得整个输出)。就您的情况而言,使用如下:for line in runProcess('mysqladmin create test -uroot -pmysqladmin12'.split()):     print line,

回首忆惘然

def run_command(command):     p = subprocess.Popen(command,                          stdout=subprocess.PIPE,                          stderr=subprocess.STDOUT)     return iter(p.stdout.readline, b'')用法与公认的答案相同:command = 'mysqladmin create test -uroot -pmysqladmin12'.split()for line in run_command(command):     print(line)
随时随地看视频慕课网APP

相关分类

Python
我要回答