【发布时间】:2013-11-05 18:51:06
【问题描述】:
在此处使用 SO 帖子:How do I read the results of a system() call in C++?
我能够编写一个运行任意系统命令并将任何输出作为字符串返回的函数:
string pipeAndGetResults(string cmd)
{
const char* ccmd = cmd.c_str();
FILE* stream = popen( ccmd, "r" );
std::ostringstream output;
while( !feof( stream ) && !ferror( stream ))
{
char buf[128];
int bytesRead = fread( buf, 1, 128, stream );
output.write( buf, bytesRead );
}
string result = output.str();
boost::trim(result);
return result;
}
我一直将它用于“立即”产生值的系统命令。我的问题是,如果 cmd 需要一些时间来运行,比如一分钟,然后写入结果,这个函数是否也会起作用。我在使用 Python 的pexpect 做类似的事情时遇到了问题;如果 cmd 需要一段时间,则在等待结果时会超时,并且我无法限制 cmd 的运行时间。我相信这个问题可以简化为 cmd 在运行多长时间后是否总是写eof?
【问题讨论】:
标签: c++