LINUX.ORG.RU

QProcess выдает пустую строку при выполнение команды «ls /dev/ | grep sda1»

 ,


0

2

Хочу понять есть ли монтированая USB флешка. Делаю в консоле:

root@pi:~#  ls /dev/ | grep sda1
sda1

Делаю в qt:

    QProcess df;
    df.start("ls", QStringList()<< "/dev/ | grep sda1");
    df.waitForFinished();
    QString str = df.readAll();
    qDebug() << str;

Вывод str ""



Последнее исправление: Alex_Golubev (всего исправлений: 1)

Тебе это в шелле надо вызывать, а то ты сейчас вызываешь ls с 1 аргументом.

Т.е. это аналог ls "/dev/ | grep sda1", а не твоей команды в 1 примере.

Ja-Ja-Hey-Ho ★★★★★
()
Последнее исправление: Ja-Ja-Hey-Ho (всего исправлений: 1)

По тегу qt подписчиков гораздо больше чем по qt5.

DrBrown
()

зачем так сложно и непереносимо?

QFileInfo fi("/dev/sda1");
if( fi.exist() )
if( fi.isDir() )
if( fi.isFile() )
sigurd ★★★★★
()
Ответ на: комментарий от Alex_Golubev

Q: Как будит выглядеть код с использованием sh -c ‘ls /dev/ | grep sda1’

A: Как форменный говнокод.

EXL ★★★★★
()
Ответ на: комментарий от EXL

qdevicewatcher дает события вставил флешку вытащил. А мне нужно понять в момент запуска программы есть флешка. qdevicewatcher я уже подключил.

Alex_Golubev
() автор топика
Последнее исправление: Alex_Golubev (всего исправлений: 1)
Ответ на: комментарий от Alex_Golubev

Заработал.

Вызывайте не шелл, а браузер, там JS вотэтовсё. надо идти в ногу со временем )

kindof
()

И не забывай, что флешка не всегда sda

kardapoltsev ★★★★★
()
Ответ на: комментарий от Alex_Golubev
#include <QList>
#include <QStorageInfo>
#include <QtDebug>

int main(int argc, char *argv[])
{
    for (auto i : QStorageInfo::mountedVolumes()) {
        qDebug() << i.device();
        qDebug() << "  " << i.fileSystemType();
        qDebug() << "  " << i.rootPath();
        qDebug() << "  " << i.displayName();
        qDebug() << "  " << i.name() << "\n";
    }

    return 0;
}
DrBrown
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.