【发布时间】:2020-07-19 21:42:21
【问题描述】:
using (Stream stdin = Console.OpenStandardInput())
{
using (Stream stdout = Console.OpenStandardOutput())
{
byte[] buffer = new byte[2048];
int bytes;
while ((bytes = stdin.Read(buffer, 0, buffer.Length)) > 0)
{
stdout.Write(buffer, 0, bytes);
}
}
}
这段代码是从标准输入到标准输出的基本回显,当我直接写入控制台时它可以工作。但是当我尝试使用另一个程序(在本例中是使用 ActionScript 3 的 AIR 游戏)写入标准输入时,它无法正常工作。
我已经使用 AS3 的 NativeProcess 启动了 C# 应用程序。它让我启动一个进程并访问它的标准输入/输出。从标准输出读取工作正常,但写入标准输入无济于事。
我不知道为什么这不起作用。我在 C# 应用程序上尝试了几种不同的读取方法,但没有捕获我通过标准输入发送的数据。
对于为什么这不起作用的任何帮助,我将不胜感激。谢谢!
【问题讨论】:
-
你能写到
stdin吗?在我看来,stdin是只读的,而stdout和stderr是只写的。每当我想将它们粘合在一起时,我都会使用管道 -
所问的问题没有意义,因为您不能 write 到您自己的应用程序的 input...寻找stackoverflow.com/questions/2613161/… - 一些edit 的帖子可能会阐明您在寻找什么。
-
standardInput 是 c# 应用程序的输出,而standardOutput 是 c# 应用程序的输入。这就是 NativeProcess 的行为方式,我将添加一些图片来说明。
-
为什么使用
writeUTF( value: "hello" );而不是正确的writeUTF( "hello" );?无论如何,使用 Net 3.5 解决了这个问题吗?我在我的开发计算机上看到 Net 4.7,但还没有机会尝试您的 DLL 问题(eg: 对于这个特定任务,它可能确实需要版本3.5)。有机会我会更新的。 -
@Flydog57,再读一遍,上面写着
"write to the stdin using another program"。我认为您假设 C# 启动了该进程,但实际上另一个程序正在将此 C# exe 作为子进程运行。来自 AS3 文档:process.standardInput.writeUTF("foo");(参见communicating with an external process 部分)因为AS3 manual 说“使用此管道将数据发送到此进程。”。
标签: c# actionscript-3 streamreader