crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проблема с установкой PATH в QProcess::setEnvironment
Litkevich Yuriy
  опции профиля:
сообщение 23.2.2010, 6:16
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Наткнулся на проблему, суть которой понять не могу. С помощью QProcess хочу запустить консольную программу (git status). Однако в стандартном окружении (а именно в PATH) нет пути к её бинарю. Хотел добавить этот путь для QProcess с помощью QProcess::setEnvironment. Окружение изменяется, но git не запускается. Т.е. делаю так:
1) запускаю свою программу в командной строке (на Виндовозе), в ответ получаю своё отладочное сообщение "Process \"git status\" may not started"
2) В командной строке устанавливаю новое значение PATH (set PATH=%PATH%;path/to/git/bin;), а затем запускаю свою программу - она запускает git.

Как делаю в коде? Отдельная фукция для задания пути к git'у:
void YGit::setGitPath(QString path)
{
    m_gitPath = path;
    QStringList env = QProcess::systemEnvironment();
    env.replaceInStrings(QRegExp("^PATH=(.*)", Qt::CaseInsensitive), QString("PATH=\\1;%1").arg(path));
    process->setEnvironment(env);
}
Сам код запуска git'а:
QString YGit::status()
{
    QString outString;

    process->setProcessChannelMode(QProcess::MergedChannels);
    process->start(QString("git status"));
    if (!process->waitForStarted()){
        qDebug() << "Process \"git status\" may not started";
        return QString();
    }

    QTime t;
    t.start();

    int sec = 1000; // 1000 ms
    int min = 60* sec; // 60 s
    
    while(1){
        if (process->waitForReadyRead(3 * min)){
            outString += QString::fromLocal8Bit(process->readAllStandardOutput().data());
        }
        if (process->state() != QProcess::Running)
            return outString;
        if (t.elapsed() >= 5 * min){
            qDebug() << "Process \"git status\" may not finished";
            return outString;
        }
    }

}


Окружение устанавливается перед process->start, это наверняка, так как выводил отладку:
qDebug() << "Create process: git status, ENV\n" << process->environment();

Т.е. установка пути в PATH ни даёт ни какого эффекта, почему?

----
Виндовоз, Qt 4.4.3, MinGW32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 23.2.2010, 9:41
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Хорошо, а возможно ли как-то задать путь поиска?
в QProcess я вообще минимум функциональности вижу, скудноватый он какой-то.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 5:26