MacOS上的QProcess尝试使用diskutil

时间:2019-01-23 17:34:19

标签: c++ macos qt terminal qt5

Qt 5.12

我正在尝试在macOS上获取卷ID,并使用以下功能:

QString getVolumeInfo()
{
    QString volumeID = "Cannot find the volumeID";
    QProcess p;
    //diskutil info $(df -h / | tail -1 | cut -d' ' -f 1)
    QString command = "diskutil";
    QStringList args;
    args << "info" <<  "$(df -h / | tail -1 | cut -d' ' -f 1)";
    p.start(command, args);
    p.waitForStarted();
    p.waitForFinished();
    foreach(QString line, QString(p.readAll()).split("\n"))
    {
       if(line.contains("Volume UUID:"))
           volumeID = line;
    }
    return volumeID;
}

由于macOS的限制,我必须使用diskutil。但是,QProcess读取对象时没有任何内容。

终端上的命令: diskutil info $(df -h / | tail -1 | cut -d''-f 1) 返回大量信息,例如:

...

SMART状态:已验证

卷UUID:954BACF1-EBC5-4D14-86FB-0912CF7F839C

磁盘/分区UUID:954BACF1-EBC5-4D14-86FB-0912CF7F839C

磁盘大小:500.1 GB(500068036608字节)(恰好976695384 512字节单位)

....

当我尝试添加qDebug()进行调试时,得到以下信息:true-“找不到磁盘:$(df -h / | tail -1 | cut -d''-f 1)\ n” < / p>

所以参数似乎没有格式化或什么?

我正在尝试实现:https://apple.stackexchange.com/questions/50302/how-can-i-tell-which-volume-the-operating-system-is-on

1 个答案:

答案 0 :(得分:0)

在Eelke解释后进行了轻微修改。

QStringList args;
args << "-c" << "diskutil info $(df -h / | tail -1 | cut -d' ' -f 1)";
p.start("/bin/bash", args);