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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: PATH для QProccess  (Прочитано 3871 раз)
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.143 секунд. Запросов: 23.