我需要读取一些Linux命令的输入到QString变量。首先,我将流重定向到临时文件并从中读取。
但是,我不喜欢这种方式。我想避免访问硬盘,越少越好。
我尝试将环境变量用作“临时文件”,然后使用getenv
将其变为变量。
QString query="a=$(fdisk -l)";
system(a.toStdString().c_str());
...
char* env;
env= getenv ("a");
然而,我一无所获。向查询添加export
具有相同的结果。
我通过env
命令手动检查变量。什么都没改变!
那么如何解决这个问题呢?还有更好的方法吗?
赞赏任何想法:)
PS:我也希望保留格式,它应该保留\t
,\n
......
答案 0 :(得分:2)
如果您使用的是 Qt ,那么您应该使用QProcess
课程以 Qt的方式进行。
#include <QProcess>
QString command = "/usr/bin/fdisk";
QStringList arguments;
arguments << "-l";
QProcess process;
process.start(command, arguments);
process.waitForFinished(-1);
QByteArray rawOutput = process.readAllStandardOutput();
QStringList output = QString(rawOutput).split("\n");
foreach (QString line, output)
{
// do something with each line from output
}
答案 1 :(得分:-1)
它无法正常工作,因为system
或popen
将开始使用fork
自己的shell进程,并且a
变量不会导出,即使它是,它只在shell进程中可用,而不是在调用原始进程中。
请记住,子进程中的更改通常不会影响其父进程(除非使用一些显式IPC,例如两者之间的管道)。
你可以做到你想要的唯一方法是在popen
上使用fdisk -l
(或一些QProcess特定机制来读取子命令的stdout的管道)然后(如果你绝对想要让您的getenv
稍后工作)使用putenv
来设置您的环境变量。
BTW,fdisk
可能正在使用/proc
来获取其信息(您可以直接获取该信息,请参阅proc(5) ...)。