@kkirolla

Как заставить код работать?

import subprocess
subprocess.run('gta_sa.exe -c -n NickName -h 51.15.205.209 -p 1337', shell=True)

Есть такой код. По идее, он должен открывать SAMP и конектить на сервер с нужным IP , ником и портом, но выходит ошибка

D:\GRAND_PC_ADMIN_10_04_24>python test.py
CMake Warning:
Ignoring extra path from command line:

"gta_sa.exe -c -n NickName -h 51.15.205.209 -p 1337"

CMake Error: The source directory "/c" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 2
Ошибка, с которой вы столкнулись, возникает из-за того, что subprocess.run() неправильно интерпретирует вашу команду. Функция пытается запустить команду в рамках интерпретатора командной строки, и в данном случае интерпретатор воспринимает вашу строку как вызов CMake, а не gta_sa.exe.

Это происходит потому что аргумент shell=True заставляет Python передать вашу команду в командную оболочку (shell), которая, в свою очередь, пытается её выполнить. Ошибка возникает, когда командная оболочка не может корректно разобрать вашу команду.

Чтобы исправить эту проблему, можно разделить команду и аргументы в виде списка элементов, чтобы subprocess.run() мог корректно их обработать. Вот как можно изменить ваш код:

import subprocess

# Разделяем команду и аргументы в список
command = ['gta_sa.exe', '-c', '-n', 'NickName', '-h', '51.15.205.209', '-p', '1337']

# Вызываем subprocess.run без использования shell=True
subprocess.run(command)


В этом случае каждый аргумент передаётся отдельно, и subprocess.run() может корректно его обработать и передать исполняемому файлу. Этот подход является более безопасным и предпочтительным, так как shell=True может повышать риски безопасности, если аргументы командной строки недостаточно контролируются или получаются из внешних, не проверенных источников.

Источник: ChatGPT
Ответ написан
Комментировать
ivankarmanow
@ivankarmanow
Начинающий программист
Судя по ошибке, дело не в Python-скрипте, а в самой программе, которую пытаешься запустить. Если ту же самую команду запустить через консоль, ошибка сохраняется?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы