Я пытаюсь запустить однофайловый исполняемый файл python, упакованный с PyInstaller. Скрипт содержит системные команды, которые необходимо выполнить. Однако, когда я пытаюсь запустить их (на окнах), они не выполняются. Дело в том, что они не выполняются только при использовании параметра PyInstaller no-console
, который скрывает консоль и запускает ее в фоновом режиме.
Я использую следующие опции: --noconsole
и -F
.
Я не только попробовал функцию subprocess.open
, но также os.popen()
, оба из которых не работают.
Кроме того, мне нужен вывод на консоль, поэтому os.system()
не будет вариантом ... пожалуйста, ответьте с учетом этого. Хотя эта функция действительно выполняла команды, поэтому я думаю, что получение вывода является проблемой. Я предполагаю, что мне нужно изменить стандартный вывод или что-то, или, может быть, если команда выполняется без консоли, вывод теряется или никогда не генерируется в первую очередь. Извините, если я звучу неопытным.
У меня нет антивирусного программного обеспечения, работающего на моем компьютере, и нет сообщения Защитника Windows и т. Д. Я понимаю, что это ненадежная комбинация - выполнение системных команд, пока они скрыты, - я только хочу создать не злонамеренную программу, которая каждую минуту убивает другую программу. Извините, если что-то осталось неясным ... просто спросите, если что-то неясно. Спасибо:)
EDIT
Вот некоторый код, чтобы помочь
command = data['command']
command_split = command.split(" ")
p = subprocess.Popen(command_split, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
result = out.decode() if out else err.decode()
io.emit("client:console_output", {
'output':result,
'adminID':data['adminID']
})
РЕДАКТИРОВАТЬ 2
Поймите, что эта функция работает, когда консоль не скрыта; следовательно, это не имеет ничего общего с логикой или кодом, а только потому, что оно скрыто. В любом случае, это вывод.
x = "taskkill /im chrome.exe /f"
print(x.split(" "))
-> ['taskkill', '/im', 'chrome.exe', '/f']