如何捕获subprocess.call的输出
我制作了一个脚本,告诉我Raspberry Pi 3的温度,但脚本有问题 . 结果输出是机器人说“你的RPI3 temp当前为0” . 我的代码出了什么问题?
@bot.command(pass_context=True)
async def vcgencmdmeasure_temp(ctx):
if ctx.message.author.id == "412372079242117123":
await bot.say("OK....")
return_code = subprocess.call("vcgencmd measure_temp", shell=True)
await bot.say("KK done")
await bot.say("Your RPI3 temp is currently: {}".format(return_code))
else:
await bot.say("Error user lacks perms(only bot owner can run this)")
编辑:我知道要运行任何命令 . 当前的脚本
@ bot.command(pass_context = True)async def rpicmd(ctx,* args):
if ctx.message.author.id == "412372079242117123":
mesg = ''.join(args)
mesg = str(mesg)
command_output = subprocess.check_output(mesg, shell=True, universal_newlines=True)
await bot.say(command_output)
else:
await bot.say("No noob")
我得到错误:
raise CommandInvokeError(e) from e
discord.ext.commands.errors.CommandInvokeError: Command raised an
exception: CalledProcessError: Command 'vcgencmdmeasure_temp' returned
non-zero exit status 12
回答(2)
您应该使用 subprocess.check_output
来获取命令的响应 .
来自文档:
subprocess.check_output(args,*,stdin = None,stderr = None,shell = False,universal_newlines = False)运行带参数的命令并将其输出作为字节字符串返回 .
使用 call
给出返回码:
subprocess.call(args,*,stdin = None,stdout = None,stderr = None,shell = False)运行args描述的命令 . 等待命令完成,然后返回returncode属性 .
2 years ago
return_code
将具有该进程的返回码 . 当进程成功存在(没有错误)时,它返回0
的代码 . 如果错误,则返回1
(或非零值)的代码 . 如果你想要程序的输出(打印到stdout
),这是获得它的一种方法: