我想编写一个函数来执行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'
发布于 2018-08-27 10:30:55
像这样的东西:
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,它可能不是你想要的,但我也想要错误消息。
这个函数在它们到来时逐行产生(通常你必须等待子进程完成以获得整个输出)。
对于您的情况,用法将是:
for line in runProcess('mysqladmin create test -uroot -pmysqladmin12'.split()):
print line,
发布于 2018-08-27 11:54:06
Vartec的答案并没有阅读所有内容,所以我做了一个版本:
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)
https://stackoverflow.com/questions/-100006058
复制相似问题