C++ 如何处理C++;,如果命令不存在';不只是打印结果,而是进入某种交互模式?
这个问题的灵感来自于C++ 如何处理C++;,如果命令不存在';不只是打印结果,而是进入某种交互模式?,c++,c,linux,terminal,C++,C,Linux,Terminal,这个问题的灵感来自于 我已经理解了如何从C或C++代码中执行UTILS。但是,我们如何从某个命令中获得结果呢?该命令不只是打印结果,而是进入某种交互模式,直到我们按下Ctrl+z或类似的按钮为止?这种命令的示例是top,通常情况下您不会这样做。启动命令时,可以使用使命令不具有交互性的选项 从技术上讲,您可以从交互式终端界面获取信息,但您很难做到这一点,因为为了使界面更人性化,通常使用终端功能(termcaps、ncurses…),其基本工作原理是输出特殊字符,因此,你必须通过知道什么时候需要什么
我已经理解了如何从C或C++代码中执行UTILS。但是,我们如何从某个命令中获得结果呢?该命令不只是打印结果,而是进入某种交互模式,直到我们按下
Ctrl+z
或类似的按钮为止?这种命令的示例是top
,通常情况下您不会这样做。启动命令时,可以使用使命令不具有交互性的选项
从技术上讲,您可以从交互式终端界面获取信息,但您很难做到这一点,因为为了使界面更人性化,通常使用终端功能(termcaps、ncurses…),其基本工作原理是输出特殊字符,因此,你必须通过知道什么时候需要什么来避开这些字符,所以除非界面非常简单和静态(实际上即使在这种情况下也是如此),否则这将是一件痛苦的事情。一些应用程序(如“对话框”)可以交互工作,并将其最终结果写入不同的输出流。对于dialog,这是使用stderr完成的(默认情况下)。如果您可以控制应用程序,您可以提供类似的操作,将信息传回调用应用程序。您只需访问stdin、stdout和stderr即可。在fork之前,根据需要创建管道,并在fork之后调用execv或任何其他变量 可以在此处找到一个示例: 还有一个常用的库,用于捕获子程序的输出,并对找到的项执行一些新操作。这个库最初是为TCL编写的,但也可以用于C和C++。 使用expect库周围的一些粘合代码,您的源代码可以如下所示:
int main()
{
Tcl_Interp *interp = Tcl_CreateInterp();
Expect_Init(interp);
// read from file
int lfd = open( "test.txt", O_RDONLY );
int fd = exp_spawnfd(lfd);
// or read from application
int fd ? exp_spawn("top","top", (char*)0)));
bool cont= true;
Expections set1 =
{
{ exp_glob, "YYY", []( Expection& exp)->void { cout << "found: YYY" << endl; }},
{ exp_regexp, "XXX ([0-9]+)", []( Expection& exp)->void { cout << "found: XXX" << exp.GetResult(1) << endl;}},
{ exp_glob, "END", [&cont]( Expection& exp)->void { cout << "EOF" << endl; cont = false; }}
};
int cnt = 0;
do
{
cout << "Run " << cnt << endl;
cnt++;
Expect ( fd, set1, 2 );
} while ( cont );
cout << "Finish" << endl;
return 0;
}
intmain()
{
Tcl_Interp*Interp=Tcl_CreateInterp();
期望初始(interp);
//从文件中读取
int lfd=open(“test.txt”,仅限ordu);
int-fd=exp_-fd(lfd);
//或从应用程序中读取
int fd?exp_spawn(“顶部”、“顶部”、“字符*)0”);
bool cont=真;
期望集1=
{
{exp_glob,“YYY”,[](Expection&exp)->void{cout So,在我的代码中获得CPU利用率的最佳方法是调用ps auxw
,例如,将结果作为字符串获取,对其进行解析并按照某些标准进行排序?这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,例如有几个问题:我指出一个交互式应用程序可以在不同的输出上返回有用的信息,而不是用它来显示。上面的初始例子可能是用-B选项来回答的。C++的不完整例子需要澄清。(例如,为了说明stderr和stdout是如何组合的),这对于C/C++的原始问题没有用处。例如,对于C/C++,可以假设提问者已经知道popen。