Название: Пробелы в QProcess::start Отправлено: Dastes от Июнь 10, 2012, 15:39 Здравствуйте.
Есть проблема с пробелами в параметрах запуска: Код: arguments << "/SE:/test/1 2.txt"; При запуске создается файл "1" в E:/test. Как пытался решить: Код: arguments << "/SE:\\test\\1 2.txt"; Уже отчаялся. Помогите пожалуйста. Название: Re: Пробелы в QProcess::start Отправлено: V1KT0P от Июнь 10, 2012, 15:46 По-любому надо в кавычки заключать. Попробуй не двойные а одинарные использовать.
Название: Re: Пробелы в QProcess::start Отправлено: Hellraiser от Июнь 10, 2012, 15:49 Код: arguments << "/S\"E:/test/1 2.txt\""; Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 10, 2012, 15:54 Неа, не помогает.
Название: Re: Пробелы в QProcess::start Отправлено: V1KT0P от Июнь 10, 2012, 16:07 Неа, не помогает. Что за программа хоть?Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 10, 2012, 16:12 1c
В пути к экзешнику пробелы воспринимаются нормально, без кавычек и всякого экранирования, а с параметрами херня выходит. батник отлично отрабатывает не смотря на проблемы в параметрах: Код: F:\Progra~1\1cv82\common\1cestart.exe DESIGNER /F"E:\test" /DumpIB"E:\test\dfsd2 gffgh 1.dt" Название: Re: Пробелы в QProcess::start Отправлено: V1KT0P от Июнь 10, 2012, 16:28 В пути к экзешнику пробелы воспринимаются нормально, без кавычек и всякого экранирования, а с параметрами херня выходит. Вообще в документации написано что под виндой оно само экранирует параметр в кавычки, если есть пробел:Цитировать Windows: Arguments that contain spaces are wrapped in quotes. Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 10, 2012, 16:38 Придется использовать system(). Что поделаешь.
Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 10, 2012, 20:27 C system() ситуация с точностью наоборот. Если в пути к exe есть пробелы то ошибка.
Есть какие-нибудь идеи? Название: Re: Пробелы в QProcess::start Отправлено: Hellraiser от Июнь 10, 2012, 21:03 Попробуй вот так
Код: arguments << "/S\"E:\\test\\1 2.txt\""; Название: Re: Пробелы в QProcess::start Отправлено: Igors от Июнь 11, 2012, 09:51 Может стоит взять какой-то др exe-шник, Если с ним все норм, значит Ваш просто не понимает кавычек
Название: Re: Пробелы в QProcess::start Отправлено: andrew.k от Июнь 11, 2012, 13:09 Кавычки не нужны.
Если бы аргументы передавались одной строкой, то да кавычки нужны. Но они нужны не исполняемой программе, а интерпретатору выполняющему запуск, чтобы корректно передать параметры. А тут аргументы передаются как список строк, поэтому проблемы с пробелом быть не должно. Тут очевидно, проблема в самой программе, она почему-то не умеет работать с путями, содержащими пробел. Чтобы убедить, как сказал Игорс, попробуй другой екзешник, либо попробуй просто из коммандной строки запустить. Думаю, получишь тот же результат. Есть, конечно, еще вариант, что это баг в QProcess, но это слишком явный баг, поэтому если бы он был, то к 4.8 его бы уже давно исправили, поэтому проблема в программе, которую ты запускаешь. Название: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 13:21 Вот пример запуска:
Код: SharedExtProcess ExternalProcess::create(const QString &cmd, const QString ¶ms) Название: Re: Пробелы в QProcess::start Отправлено: Igors от Июнь 11, 2012, 14:49 Кавычки не нужны. Не знаю где "тут", неск дней назад решал проблемы для Вындоуз приложения которое использовало GetCommandLine ф-цию API, ну и пришлось кавычки разбирать рукамиЕсли бы аргументы передавались одной строкой, то да кавычки нужны. Но они нужны не исполняемой программе, а интерпретатору выполняющему запуск, чтобы корректно передать параметры. А тут аргументы передаются как список строк, поэтому проблемы с пробелом быть не должно. Название: Re: Пробелы в QProcess::start Отправлено: Alex Custov от Июнь 11, 2012, 15:47 Вот пример запуска: А зачем ты используешь нативное API для запуска процессов? Название: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 16:29 Вот пример запуска: А зачем ты используешь нативное API для запуска процессов? Название: Re: Пробелы в QProcess::start Отправлено: Alex Custov от Июнь 11, 2012, 16:34 Потому что как-то борол-борол такую же проблему как топикстартер, и только так и поборол. Эти проблемы решаются через использование Цитировать QProcess::execute ( const QString & program, const QStringList & arguments ) , там ничего экранировать не нужноНазвание: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 17:00 Эти проблемы решаются через использование Если бы все было так гладко, этого топика не было бы.Цитировать QProcess::execute ( const QString & program, const QStringList & arguments ) , там ничего экранировать не нужноНазвание: Re: Пробелы в QProcess::start Отправлено: Alex Custov от Июнь 11, 2012, 17:09 Если бы все было так гладко, этого топика не было бы. Выложи программу (ТС тоже), с которой это не работает. Я проверял и с бинарниками и с батниками, всё работает. Для особо запущенных случаев Hellraiser дал 100% совместимый с cmd вариант. Название: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 17:27 Выложи программу (ТС тоже), с которой это не работает. Я проверял и с бинарниками и с батниками, всё работает. Для особо запущенных случаев Hellraiser дал 100% совместимый с cmd вариант. Я боролся с 1С7.7, у ТС, похоже что 1С8.2 . сейчас под рукой нет инсталляшки. Название: Re: Пробелы в QProcess::start Отправлено: andrew.k от Июнь 11, 2012, 19:24 Кавычки не нужны. Не знаю где "тут", неск дней назад решал проблемы для Вындоуз приложения которое использовало GetCommandLine ф-цию API, ну и пришлось кавычки разбирать рукамиЕсли бы аргументы передавались одной строкой, то да кавычки нужны. Но они нужны не исполняемой программе, а интерпретатору выполняющему запуск, чтобы корректно передать параметры. А тут аргументы передаются как список строк, поэтому проблемы с пробелом быть не должно. И при чем тут API функции не ясно. И тем более ясно, что если функция возвращает командную строку целиком, то без кавычек не обойтись, я об этом и написал. Вот в QProcess таких проблем быть не может. Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 11, 2012, 19:49 Да, 1с 8.2
Кое как получилось с System(), но в пути к exe нельзя использовать пробелы, Program Files заменяются сокращенными именами, и если будет нестандартный путь установки с пробелами, то капец. И еще выскакивает на пол секунды черное окно консоли, а в start() его нет. Если есть желание поковыряться, то вот ссылка на 1с. (~130мб, требуется минутная регистрация). Или где-нибудь на торрентах. http://1c-dn.com/downloads/index.php?SECTION_ID=56 (http://1c-dn.com/downloads/index.php?SECTION_ID=56) Название: Re: Пробелы в QProcess::start Отправлено: andrew.k от Июнь 11, 2012, 19:56 Да, 1с 8.2 Ты пробовал запускать эту программу из командной строки, так как тебе нужно (с пробелами и кавычками)?Кое как получилось с System(), но в пути к exe нельзя использовать пробелы, Program Files заменяются сокращенными именами, и если будет нестандартный путь установки с пробелами, то капец. И еще выскакивает на пол секунды черное окно консоли, а в start() его нет. Если есть желание поковыряться, то вот ссылка на 1с. (~130мб, требуется минутная регистрация). Или где-нибудь на торрентах. http://1c-dn.com/downloads/index.php?SECTION_ID=56 (http://1c-dn.com/downloads/index.php?SECTION_ID=56) Нормально ли она при этом отрабатывает? Думаю нет. Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 11, 2012, 20:10 бат файл отрабатывает отлично
Код: "F:\Program Files\1cv82\common\1cestart.exe" DESIGNER /F"E:\test" /DumpIB"E:\test\dfsd2 gffgh 1.dt" /N"asd" /P"123" Название: Re: Пробелы в QProcess::start Отправлено: Alex Custov от Июнь 11, 2012, 21:00 Попробуй вот так
Код
Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 11, 2012, 21:13 Процесс не запустился.
Название: Re: Пробелы в QProcess::start Отправлено: Alex Custov от Июнь 11, 2012, 21:21 запусти через QProcess::start() и отлови stdout/stderr, статус выхода, код возврата, и скопируй сюда код и все эти логи. Теоретически я могу предположить, что 1с не поддерживает раздельные параметры, то есть принимает только
Код: /N"1 2" Код: /N "1 2" Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 11, 2012, 21:44 Не соображу как логи вывести.
Вот такое выдается предупреждение: Цитировать ..\testbat\main.cpp:62: warning: unknown escape sequence '\P' ..\testbat\main.cpp:62: warning: unknown escape sequence '\c' Название: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 21:51 Не соображу как логи вывести. Обратную косую надо экранировать!Вот такое выдается предупреждение: Цитировать ..\testbat\main.cpp:62: warning: unknown escape sequence '\P' ..\testbat\main.cpp:62: warning: unknown escape sequence '\c' путь c:\Program Files\1c\bin надо записать как "\"c:\\Program Files\\1c\\bin\"" Название: Re: Пробелы в QProcess::start Отправлено: andrew.k от Июнь 11, 2012, 22:10 Не соображу как логи вывести. Обратную косую надо экранировать!Вот такое выдается предупреждение: Цитировать ..\testbat\main.cpp:62: warning: unknown escape sequence '\P' ..\testbat\main.cpp:62: warning: unknown escape sequence '\c' путь c:\Program Files\1c\bin надо записать как "\"c:\\Program Files\\1c\\bin\"" Лучше прямые слеши использовать. Одно из этого должно правильно передавать параметры (параметры произвольные для примера): Код
Код
Если это не работает, значит виноват 1cestart и ничего тут не сделаешь. Название: Re: Пробелы в QProcess::start Отправлено: alex312 от Июнь 11, 2012, 22:21 Лучше прямые слеши использовать. Одно из этого должно правильно передавать параметры (параметры произвольные для примера): Код
Код
Если это не работает, значит виноват 1cestart и ничего тут не сделаешь. Название: Re: Пробелы в QProcess::start Отправлено: andrew.k от Июнь 12, 2012, 00:58 Лучше прямые слеши использовать. Одно из этого должно правильно передавать параметры (параметры произвольные для примера): Код
Код
Если это не работает, значит виноват 1cestart и ничего тут не сделаешь. Название: Re: Пробелы в QProcess::start Отправлено: Patrin Andrey от Июнь 12, 2012, 10:28 Код: bool ok = QProcess::startDetached( Название: Re: Пробелы в QProcess::start Отправлено: Dastes от Июнь 12, 2012, 19:20 Значит не судьба >:(
Спасибо за помощь |