这是我的代码:
static void Main(string[] args)
{
if(args.Length > 1)
{
int id;
if(int.TryParse(args[0], out id))
{
try
{
var p = Process.GetProcessById(id);
p.StandardInput.WriteLine(args[1]);
}
catch (ArgumentException)
{
Console.WriteLine($"Couldn't find process with id {id}");
}
}
else
{
Console.WriteLine($"Couldn't find process with id {args[0]}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的id有一个进程.工作正常然后我试图向它的标准输入发送一些东西.这引发了InvalidOperationException.注意:当我尝试获取StandardInput时发生异常,而不是在我尝试使用WriteLine时发生.
我相信我知道为什么我得到例外.我的应用程序没有启动该进程,因此我从未有机会将RedirectStandardInput设置为true.
我的目标是能够使用此应用程序将文本发送到python交互式控制台(或其他语言).我仍然希望能够自己输入文本到python提示符,但我也想给我的应用程序控件.
我该怎么做呢?
好吧,你说得一中要害。除非您自己启动该过程,否则您不拥有通信流 - 并且实际上没有(合理的)方法可以解决此问题。
如果您默认运行控制台应用程序,它将运行在cmd- 拥有流的人中。如果您希望应用程序“托管”该进程,则您必须是启动该进程的人。你只需要学会打电话myHoster myApp而不是start myApp:)
您可能还需要考虑对 PowerShell 主机进行编码。这将使您能够非常轻松地处理交互式 shell,尽管您必须学习使用 PowerShell 而不是 CMD :) 它非常容易实现,PowerShell 确实具有很强的可扩展性。