Russian Qt Forum

Qt => Общие вопросы => Тема начата: admsasha от Июль 05, 2019, 09:09



Название: PATH для QProccess
Отправлено: admsasha от Июль 05, 2019, 09:09

Код:
  
    QProcess proc;
    QProcessEnvironment systemEnvironment;
    systemEnvironment.insert("PATH",systemEnvironment.value("PATH")+":/home/sasha/source/test/aaa");
    proc.setEnvironment(QStringList() << "PATH=/home/sasha/source/test/aaa");
    proc.setProcessEnvironment(systemEnvironment);

    proc.start("myprog --version");
    qDebug() << proc.waitForFinished();
    qDebug() << proc.errorString();
    qDebug() << proc.readAllStandardError();
    qDebug() << proc.readAllStandardOutput();

Тут лежит моя программа: /home/sasha/source/test/aaa/myprog

В ответ получаю
Код:
false
"execve: No such file or directory"
""
""

т.е. файла не видит.
НО так
Код:
proc.start("/home/sasha/source/test/aaa/myprog --version");
успешно отрабатывает.

Как правильно задать PATH для поиска ?


Название: Re: PATH для QProccess
Отправлено: Old от Июль 05, 2019, 10:32
Вы пытаетесь установить окружение, которое получит запущенный процесс. Оно никак не учитывается при запуске этого процесса. Для поиска файла программы по прежнему используется глобальное.
Значит нужно менять его или использовать полный путь.


Название: Re: PATH для QProccess
Отправлено: admsasha от Июль 05, 2019, 10:38
В таком случае, почему я не могу использовать qputenv ?


Название: Re: PATH для QProccess
Отправлено: Old от Июль 05, 2019, 10:42
В таком случае, почему я не могу использовать qputenv ?
Потому, что это модификация текущего окружения процесса, эти изменения увидит только сам этот процесс.



Название: Re: PATH для QProccess
Отправлено: admsasha от Июль 05, 2019, 11:20
Тем не менее это сработало.


Название: Re: PATH для QProccess
Отправлено: sergek от Июль 05, 2019, 12:04

Код:
    proc.start("myprog --version");
Кажется, проблема в том, как linux ищет файл в каталогах. Поскольку вы задаете имя файла "myprog --version", естественно, такой файл найти не может.
Попробуйте так:
Код:
    QStringList arg;
    arg << "--version";
    proc.start("myprog",  arg);


Название: Re: PATH для QProccess
Отправлено: Old от Июль 05, 2019, 12:31
Тем не менее это сработало.
Да, это я неправильно сказал.
При запуске используется не глобальное окружение, а окружение родительского процесса. Вы изменили окружение родительского процесса из которого запускаете дочерний и оно было использовано для запуска.