在 Unix 上分离命令行输出(处理与用户交互)的方法是什么?
我正在编写一个控制台应用程序,其中可能需要用户交互(提示键盘输入、cli 参数等),但我想将其与处理结果分开(处理结果转到 cout,以某种方式可以通过管道传输到其他应用程序)。
如果我不能将与用户的所有交互发送到 cerr (并非所有内容都是错误),我该如何实现这一目标?
I'm writing a console application in which user interaction might be necessary (prompt for keyboard input, cli arguments etc.), but I want to keep it separate from the result of the processing (which goes to cout, in a way that it can be piped to some other application).
How can I achieve this, if I can't just send all interaction with the user to cerr (not everything is an error)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
/dev/tty
是通常的方式,但在大多数类 Unix 操作系统上也可以从cerr
/stderr
读取,因为系统通常将 tty 作为stdin
打开一次,然后dup()
将其发送到stdout
和stderr
上。/dev/tty
is the usual way, but it's also possible on most Unix-like operating systems to read fromcerr
/stderr
because the system usually opens the tty once asstdin
anddup()
s it ontostdout
andstderr
.当你的标准输出通过管道传输到其他地方时,在终端上显示某些内容的唯一方法(除了诅咒和对话框之类的东西)是标准错误。
When your stdout is piped somewhere else, the only way to show something on the terminal (apart from maybe things like curses and dialog) is stderr.
如果需要用户交互,请打开/dev/tty,它将成为进程的控制终端。标准错误和标准输入也可以被重定向。
If you need user interaction, open /dev/tty, it will be the controlling terminal for the process. Standard error and standard input may be redirected as well.