在MathLink
使用从内核时,我遇到了正确解析TextPacket
s 的问题。特别是当这样的数据包对应于Message
从内核生成的时,我根本不明白如何正确处理它。我需要Messages
将它们打印在评估笔记本中,就好像它们是由主内核生成的一样(但有一些标记以明确它来自从属内核)。而且我需要将TextPacket
s 对应的Message
s 与 just toPrint[]
命令分开。后者我也需要正确解析,将它们打印在评估笔记本中,并带有一点标记,表明它来自从内核。
下面是一个例子:
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;
但我认为应该有更直接的解决方案。特别是在以这种方式处理时,我在里面得到TextPacket
s HoldForm
:
TextPacket[Power::infy: Infinite expression HoldForm[0^(-1)] encountered.]
我不知道如何将这样的字符串转换为适合打印为Message
.
PS这个问题来自那个问题。