【发布时间】:2011-02-14 23:33:26
【问题描述】:
在使用从属内核处理 MathLink 时,我在正确解析 TextPackets 时遇到问题。特别是当此类数据包对应于从属内核生成的Message 时,我根本不明白如何正确处理它。我需要在评估笔记本中打印这样的Messages,就好像它们是由主内核生成的一样(但有一些标记表明它来自从属内核)。我需要将与Messages 相对应的TextPackets 与Print[] 命令分开。后者我也需要正确解析,将它们打印在评估笔记本中,并带有一点标记,表明它来自从内核。
下面是一个例子:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
Print@LinkRead[link]
LinkWrite[link,
Unevaluated[EnterExpressionPacket[Print[a]; 1/0; Print[b]]]]
While[Not@MatchQ[packet = LinkRead[link], InputNamePacket[_]],
Print[packet]]
Message 默认通过MathLink 形式:
TextPacket[ 1
Power::infy: Infinite expression - encountered.
0]
看起来很丑。我发现让它变得更好的唯一方法是在从属内核中进行评估
$MessagePrePrint = InputForm;
但我认为应该有更直接的解决方案。特别是在以这种方式处理时,我得到TextPackets 和HoldForms 里面:
TextPacket[Power::infy: Infinite expression HoldForm[0^(-1)] encountered.]
我不知道如何将此类字符串转换为适合打印为Message 的形式。
附:这个问题来自that问题。
【问题讨论】:
标签: wolfram-mathematica mathlink