Russian Qt Forum
Апреля 04, 2025, 17:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: PATH для QProccess  (Прочитано 4016 раз)
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 для поиска ?
« Последнее редактирование: Июля 05, 2019, 10:38 от admsasha » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Июля 05, 2019, 10:32 »

Вы пытаетесь установить окружение, которое получит запущенный процесс. Оно никак не учитывается при запуске этого процесса. Для поиска файла программы по прежнему используется глобальное.
Значит нужно менять его или использовать полный путь.
Записан
admsasha
Гость
« Ответ #2 : Июля 05, 2019, 10:38 »

В таком случае, почему я не могу использовать qputenv ?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Июля 05, 2019, 10:42 »

В таком случае, почему я не могу использовать qputenv ?
Потому, что это модификация текущего окружения процесса, эти изменения увидит только сам этот процесс.

Записан
admsasha
Гость
« Ответ #4 : Июля 05, 2019, 11:20 »

Тем не менее это сработало.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Июля 05, 2019, 12:04 »


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

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Июля 05, 2019, 12:31 »

Тем не менее это сработало.
Да, это я неправильно сказал.
При запуске используется не глобальное окружение, а окружение родительского процесса. Вы изменили окружение родительского процесса из которого запускаете дочерний и оно было использовано для запуска.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.028 секунд. Запросов: 20.