Добрый день!
Пишу интегратор своего рода "мост" для связи приложения с интерпретатором python. К этому "мосту" хочу прикрутить хотелки.
Подобную роль играет лаунчер для python и его исходник прикреплен архивом. Изучив его я пытаюсь конвертировать на python язык и все работает но я не могу через него установить например пакеты.
Например launcher.exe -m pip install xlsx2html выбивает ошибку.
Сам код что у меня есть (в архиве он тоже есть):
211731-vms-Gayka.png
Далее собираю его в exe и работаю через IDE для python.
И вторая проблема - не идет логирование почему то хотя при запуске лог появляется и IDE спрашивает его о версии и все и на этом лог заканчивается а IDE продолжает с ним работать и запускать код.
ИИ тормозит может и быть политика качества ответов.
При вставке кода почему то вылетает ошибка форума.
Ау, есть кто живой ?
Ответ только один ide как то взаимодействует с puthon.exe как то еще. Попробуем другое ide.
1. Изучайте синтаксис команд операционной системы...
2. Выведите на экран содержимое "command"
3. Скопируйте эту строку(точно(!)) в командное окно Windows - "cmd"
4. Выполните...
5. Делайте выводы (правильные(!)).
Цитата: 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 компонента.
"
2. Выведите на экран содержимое "command" [- Ваша переменная]
3. Скопируйте эту строку[-Ваша переменная "command"](точно(!)) в командное окно Windows - "cmd"
"
Цитата: p3452 от 26.02.25, 19:24:46Выведите на экран содержимое "command" [- Ваша переменная]
Вы можете просто написать пример ? Ide работает через него.
213903-vms-SHayba.png
p3452, Вы часом не умерли ? Куды пропали? Усе?
p3452, Вы очень не вовремя умерли ...
Глупость Форума.png
Бо-о-льшой привет Админу Форума!
p3452, Вы фото прикрепите.
Больше не у кого нет не какого мнения на эту интересную задачу нет ?
#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
Тестирую его так:
Снимок123456.PNG