gpt4 book ai didi

interop - 如何从 Mathematica 调用交互式 D 进程?

转载 作者:行者123 更新时间:2023-12-02 01:03:50 24 4
gpt4 key购买 nike

我正在尝试使用 Mathematicas 的 StartProcess 与另一个进程建立交互式 session 。它与 this question 中的场景基本相同。 ,只是我调用的是 D 程序而不是 Fortran 程序。

以交互方式从标准输入读取并写入标准输出的最小 D 程序为例(注意无限循环):

// D
void main(string[] argv) {
while(true) {
auto name = readln().chomp;
writefln("Hello %s!", name);
}
}

当我从命令提示符运行这个程序时,它的行为符合预期。如果我想从 Mathematica 运行它,这应该是可行的:

(* Mathematica *)
dhello = StartProcess["dhello.exe"];
WriteLine[dhello, "Wulfrick"];
ReadLine[dhello]

但事实并非如此。对 ReadLine[] 的调用阻塞,就好像在等待进程完成一样。我最初认为这可能是 Mathematica 中的问题,但我尝试改为调用 C# 程序并且它起作用了!举个例子:

// C#
static void Main(string[] args) {
while (true) {
var name = Console.ReadLine();
Console.WriteLine($"Hello {name}!");
}
}

现在在 Mathematica 方面,正在做:

(* Mathematica *)
cshello = StartProcess["cshello.exe"];
WriteLine[cshello, "Wulfrick"];
ReadLine[cshello]

按预期工作,我一调用 ReadLine[] 就打印输出并保持交互性。所以看起来问题确实出在 D 方。这也是我决定在这里而不是在 mathematica.stackexchange 上发帖的原因。

我真的很想用 D 程序来完成这项工作。非常感谢任何输入。

系统:

  • Windows 10 x64
  • 数学 11.2
  • DMD v2.078.2

最佳答案

标准输出可能没有被刷新。

尝试:

import std.stdio : stdout;
stdout.flush();

在 while 循环结束时。

关于interop - 如何从 Mathematica 调用交互式 D 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48825687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com