从 python 到 cpp 程序的进程间通信
Inter process communication from python to cpp program
假设有 3 个文件:f1.cpp、f2.py、f3.cpp。
我在 运行 linux 终端上的命令如下:
$./f1.out | python3 f2.py | ./f3.out
f1 的输出完美地进入了 f2 的输入。此外,f2 的输出完全进入 f3。我在 f3 中显示输出。 f1 在特定时间间隔后为 f2 生成输入。在此间隔期间,我需要在 f3 文件中输入用户输入,以便它可以在暂停期间相应地给出输出。
我尝试调试我的代码,我发现虽然没有用户输入的最终输出是由 f3 生成的,但我的用户输入没有被读取。有人帮忙!!
由于您已经在命令中声明 f3 应从 f2 的输出中获取输入,而 f2 应从 f1 的输出中获取输入,因此现在没有直接的方法向 f3 提供控制台输入。
这里最好的方法是(假设您也只是 f1 和 f2 的作者)您可以仅在 f1 中读取该用户输入并立即打印它
cin >> input;
cout << input;
以便将其传递给 f2 的输入。你也可以在 f2 中做类似的事情
inp = str(input)
print(inp)
因此根据需要将其传递给 f3。
但是如果您不想这样做或者您不是 f1 和 f2 的作者,我建议您在单独的终端 window 中启动 f3 并使用命名管道( FIFO)用于 f2 和 f3 之间的通信。由于通信将通过 FIFO 进行,stdin 仍将指向键盘,您可以按 f3 键入输入。
编辑
另一种方法是(尽管我不确定这有多健康),您可以在休眠前生成一个新线程。在新线程中获取输入并在获取输入后终止该新线程。只要未给出输入,新线程将是 运行。在主线程中休眠 5 秒,当主线程唤醒时,使用类似 pthread_kill
.
的方式强行终止新线程
假设有 3 个文件:f1.cpp、f2.py、f3.cpp。 我在 运行 linux 终端上的命令如下:
$./f1.out | python3 f2.py | ./f3.out
f1 的输出完美地进入了 f2 的输入。此外,f2 的输出完全进入 f3。我在 f3 中显示输出。 f1 在特定时间间隔后为 f2 生成输入。在此间隔期间,我需要在 f3 文件中输入用户输入,以便它可以在暂停期间相应地给出输出。 我尝试调试我的代码,我发现虽然没有用户输入的最终输出是由 f3 生成的,但我的用户输入没有被读取。有人帮忙!!
由于您已经在命令中声明 f3 应从 f2 的输出中获取输入,而 f2 应从 f1 的输出中获取输入,因此现在没有直接的方法向 f3 提供控制台输入。
这里最好的方法是(假设您也只是 f1 和 f2 的作者)您可以仅在 f1 中读取该用户输入并立即打印它
cin >> input;
cout << input;
以便将其传递给 f2 的输入。你也可以在 f2 中做类似的事情
inp = str(input)
print(inp)
因此根据需要将其传递给 f3。
但是如果您不想这样做或者您不是 f1 和 f2 的作者,我建议您在单独的终端 window 中启动 f3 并使用命名管道( FIFO)用于 f2 和 f3 之间的通信。由于通信将通过 FIFO 进行,stdin 仍将指向键盘,您可以按 f3 键入输入。
编辑
另一种方法是(尽管我不确定这有多健康),您可以在休眠前生成一个新线程。在新线程中获取输入并在获取输入后终止该新线程。只要未给出输入,新线程将是 运行。在主线程中休眠 5 秒,当主线程唤醒时,使用类似 pthread_kill
.