[英]Read output of linux command without using temp file
我需要将一些Linux命令的输入读取到QString变量。 首先,我将流重定向到临时文件并从中读取。
但是,我不喜欢这种方式。 我想避免访问硬盘,越少越好。
我尝试将环境变量用作“临时文件”,然后使用getenv
将其转换为变量。
像这样:
QString query="a=$(fdisk -l)";
system(a.toStdString().c_str());
...
char* env;
env= getenv ("a");
但是,我什么也没得到。 将export
添加到查询具有相同的结果。
我通过env
命令手动检查变量。 没有改变!
那么如何解决呢? 还有没有更好的方法可以做到这一点?
任何想法表示赞赏:)
PS:我也想保留格式,应该保留\\t
, \\n
...
如果您使用的是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
}
它不能按您希望的方式工作,因为system
或popen
将开始使用fork
自己的shell进程,并且a
变量不会导出,即使已导出,也只能在该shell进程中使用,而不能在调用原始进程中使用。
请记住,子进程的更改通常不会影响其父进程(除非使用某些显式IPC,例如两者之间的管道)。
您可以做的唯一方法是在fdisk -l
上使用popen
(或某种QProcess特定机制,通过管道读取child命令的stdout),然后(如果您绝对想让getenv
以后工作),请使用putenv
设置环境变量。
顺便说一句, fdisk
可能正在使用/proc
来获取其信息(您可以直接获取,请参见proc(5) ...)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.