• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Интегратор python для приложений.

Автор Doom2, 26.02.25, 16:52:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Doom2

Добрый день!

Пишу интегратор своего рода "мост" для связи приложения с интерпретатором python. К этому "мосту" хочу прикрутить хотелки.
Подобную роль играет лаунчер для python и его исходник прикреплен архивом. Изучив его я пытаюсь конвертировать на python язык и все работает но я не могу через него установить например пакеты.
Например launcher.exe -m pip install xlsx2html выбивает ошибку.

Сам код что у меня есть (в архиве он тоже есть):

211731-vms-Gayka.png

Далее собираю его в exe и работаю через IDE для python.
И вторая проблема - не идет логирование почему то хотя при запуске лог появляется и IDE спрашивает его о версии и все и на этом лог заканчивается а IDE продолжает с ним работать и запускать код.
ИИ тормозит может и быть политика качества ответов.

При вставке кода почему то вылетает ошибка форума.



Doom2

#1
Ау, есть кто живой ?
Ответ только один ide как то взаимодействует с puthon.exe как то еще. Попробуем другое ide.

p3452

1. Изучайте синтаксис команд операционной системы...
2. Выведите на экран содержимое "command"
3. Скопируйте эту строку(точно(!)) в командное окно Windows - "cmd"
4. Выполните...
5. Делайте выводы (правильные(!)).
 

Doom2

Цитата: p3452 от 26.02.25, 18:18:20Изучайте синтаксис команд операционной системы...
Ключи учтены иначе бы Ide не работал бы с ним верно?

Цитата: p3452 от 26.02.25, 18:18:20Выведите на экран содержимое "command"
Если самому запускать через cmd все отображается и работает.

Цитата: p3452 от 26.02.25, 18:18:20Скопируйте эту строку(точно(!)) в командное окно Windows - "cmd"
какую команду ?

Цитата: p3452 от 26.02.25, 18:18:20Делайте выводы (правильные(!)).
я знаю как минимум 2 способа работать с Python не запуская сам exe
Ide для работы c python требует установку kernel компонента.

p3452

"
2. Выведите на экран содержимое "command" [- Ваша переменная]
3. Скопируйте эту строку[-Ваша переменная "command"](точно(!)) в командное окно Windows - "cmd"
"

Doom2

#5
Цитата: p3452 от 26.02.25, 19:24:46Выведите на экран содержимое "command" [- Ваша переменная]
Вы можете просто написать пример ? Ide работает через него.


213903-vms-SHayba.png

Doom2

p3452, Вы часом не умерли ? Куды пропали? Усе?

Doom2

p3452, Вы очень не вовремя умерли ...

p3452

Глупость Форума.png

Бо-о-льшой привет Админу Форума!
+ Благодарностей: 1

Doom2


Doom2

#10
Больше не у кого нет не какого мнения на эту интересную задачу нет ?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>

#define PYTHON_EXECUTABLE L"C:\\Python_3.11.6x64\\python.exe"

// Функция логирования запуска
void log_command(int argc, char *argv[]) {
    wchar_t log_file[MAX_PATH];
    swprintf(log_file, MAX_PATH, L"C:\\MultiPython\\v4\\launcher_log.txt");

    FILE *log = _wfopen(log_file, L"a, ccs=UTF-8");
    if (log) {
        fwprintf(log, L"Запуск: ");
        for (int i = 1; i < argc; i++) {
            fwprintf(log, L"%hs ", argv[i]);
        }
        fwprintf(log, L"\n");
        fclose(log);
    } else {
        wprintf(L"Ошибка открытия лога: %ls\n", log_file);
    }
}

// Функция запуска Python
int run_python(int argc, char *argv[]) {
    STARTUPINFOW si = { sizeof(STARTUPINFOW) };
    PROCESS_INFORMATION pi;
    SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
   
    HANDLE hRead, hWrite;
    if (!CreatePipe(&hRead, &hWrite, &sa, 0)) {
        fwprintf(stderr, L"Ошибка создания пайпа\n");
        return 1;
    }

    SetHandleInformation(hRead, HANDLE_FLAG_INHERIT, 0);
    si.dwFlags = STARTF_USESTDHANDLES;
    si.hStdOutput = hWrite;
    si.hStdError = hWrite;

    wchar_t command[2048] = L"";
    wcscpy(command, PYTHON_EXECUTABLE);
    wcscat(command, L" ");

    int needs_c = 1;
    for (int i = 1; i < argc; i++) {
        if (argv[i][0] == '-') {
            needs_c = 0;
            break;
        }
    }

    if (needs_c) {
        wcscat(command, L"-c \"");
    }

    for (int i = 1; i < argc; i++) {
        if (i > 1) wcscat(command, L" ");
        size_t len = strlen(argv[i]) + 1;
        wchar_t *warg = (wchar_t *)malloc(len * sizeof(wchar_t));
        mbstowcs(warg, argv[i], len);
        wcscat(command, warg);
        free(warg);
    }

    if (needs_c) {
        wcscat(command, L"\"");
    }

    if (!CreateProcessW(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
        fwprintf(stderr, L"Ошибка запуска Python: %d\n", GetLastError());
        CloseHandle(hWrite);
        CloseHandle(hRead);
        return 1;
    }

    // Теперь можно закрыть hWrite, так как Python уже использует этот дескриптор
    CloseHandle(hWrite);

    // Читаем stdout как байтовый поток (UTF-8)
    char buffer[4096];
    DWORD bytesRead;
    while (ReadFile(hRead, buffer, sizeof(buffer) - 1, &bytesRead, NULL) && bytesRead > 0) {
        buffer[bytesRead] = '\0'; // Завершаем строку
        wchar_t wbuffer[4096];
        MultiByteToWideChar(CP_UTF8, 0, buffer, -1, wbuffer, 4096);
        wprintf(L"%s", wbuffer);
        fflush(stdout); // Гарантируем немедленный вывод
    }

    CloseHandle(hRead);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;
}

int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "");

    if (argc < 2) {
        fwprintf(stderr, L"Ошибка: не переданы аргументы.\n");
        return 1;
    }

    log_command(argc, argv);
    return run_python(argc, argv);
}

сборка: gcc launcher.c -o launcher.exe

Doom2