【发布时间】:2020-07-20 17:52:20
【问题描述】:
目前正在编写一个 CLI 应用程序,它为某些 Git 功能提供了更好的包装器。由于这是一个 CLI,因此用户使用他们的终端来使用该应用程序。
我需要做的是将某些命令的输出通过管道传输到“干净”的交互式子程序中。例如,如果用户打开了我的 UI,但按下了一个键,我需要我的 UI 与 git add --patch [file_name] 的 UI 完全交换。当用户完成后(因为这是一个最终结束的逐步过程),我需要切换回我的应用程序的 UI。
问题是,我不知道将这个输出传送到哪里或什么地方。如果我将它通过管道传输到终端,它会与现有 CLI 应用程序的 stdout 冲突,并且不起作用。
一个单独但相关的功能是显示差异日志。为了解决这个干净和交互式终端的问题,我将stdout 输入less 并且效果很好。只是找不到像git add --patch 这样更复杂的东西的方法。
如果需要更多详细信息,请告诉我。上次当我添加(显然太多)信息时,Mods 变得脾气暴躁,所以这是超级减少的。
【问题讨论】:
-
你需要创建一个伪终端(PTY)。
-
好的,以前从未听说过。谢谢。有没有一些标准的方法可以做到这一点,还是你通常必须自己动手?找不到很多初学者级别的文档,但可能是我的错。不过我会努力的,感谢指针。
-
POSIX 兼容系统有一个标准方法。这是一个非常通用的功能。 devblogs.microsoft.com/commandline/… 和 stackoverflow.com/questions/21545897/… 用于 Windows。维基上的文章:en.wikipedia.org/wiki/Pseudoterminal。 Unix 手册:man7.org/linux/man-pages/man7/pty.7.html。 大量可用文档!
-
好吧,这完全超出了我的想象。我以为只有一些简单且跨平台的东西,我可以将一个命令输入并让一切正常。显然情况并非如此。不过感谢您的帮助。
-
这就是如何正确实现它。但是你看,即使是微软也意识到他们需要一个功能。 :-)
标签: terminal