You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pymsteams文本换行符失效,如何实现与Python终端一致的MS Teams输出?

问题描述

从Linux机器获取网络接口输出后推送至MS Teams频道,发现换行符无法正常生效,导致显示格式混乱。

代码示例

stdin, stdout, stderr = client.exec_command("ip addr | grep bond0")
pwd_out=stdout.read().decode("utf-8")
new_text="Link Status:"+"\n" +  pwd_out
print(new_text)
myTeamsMessage.text(new_text)

预期输出(Python终端)

Link Status:
6: ens1f0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
9: ens2f1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
10: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
11: bond0.400@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.40.10/24 brd 192.168.40.255 scope global noprefixroute bond0.400
12: bond0.501@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.51.16/24 brd 192.168.51.255 scope global noprefixroute bond0.501

实际Teams输出

payload: {'text': 'Link Status:\n6: ens1f0: &lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&gt; mtu 1500 qdisc mq master bond0 state UP group default qlen 1000\n9: ens2f1: &lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&gt; mtu 1500 qdisc mq master bond0 state UP group default qlen 1000\n10: bond0: &lt;BROADCAST,MULTICAST,MASTER,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000\n11: bond0.400@bond0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000\n    inet 192.168.40.10/24 brd 192.168.40.255 scope global noprefixroute bond0.400\n12: bond0.501@bond0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000\n    inet 192.168.51.16/24 brd 192.168.51.255 scope global noprefixroute bond0.501\n'}

解决方法

MS Teams的文本消息默认解析Markdown语法,普通换行符\n无法被识别,需通过以下方式调整格式:

方法1:替换换行符为Markdown兼容格式

将文本中的\n替换为\n\n(Markdown换行规则)或<br>(HTML换行标签),Teams会自动解析并实现换行:

stdin, stdout, stderr = client.exec_command("ip addr | grep bond0")
pwd_out=stdout.read().decode("utf-8")
# 方案A:用Markdown换行规则
formatted_text = "Link Status:\n\n" + pwd_out.replace("\n", "\n\n")
# 方案B:用HTML换行标签
# formatted_text = "Link Status:<br>" + pwd_out.replace("\n", "<br>")
myTeamsMessage.text(formatted_text)

方法2:用Markdown代码块包裹内容

将输出内容放在Markdown代码块中,既能完整保留原始换行和缩进,还能赋予代码样式,可读性更强:

stdin, stdout, stderr = client.exec_command("ip addr | grep bond0")
pwd_out=stdout.read().decode("utf-8")
# 用三个反引号包裹内容,指定shell格式可选
formatted_text = "Link Status:\n```shell\n" + pwd_out + "\n```"
myTeamsMessage.text(formatted_text)

方法3:使用Teams自适应卡片(定制化展示)

如果需要更灵活的排版,可使用自适应卡片,卡片会严格保留文本的原始格式:

from teams.models import AdaptiveCard, TextBlock

card = AdaptiveCard()
card.add(TextBlock(text="Link Status:", size="large"))
# 用pre标签强制保留原始格式
card.add(TextBlock(text=f"<pre>{pwd_out}</pre>", wrap=True))
myTeamsMessage.attachments([card])

内容的提问来源于stack exchange,提问作者Komal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:30:07