- Как скрыть окно консоли в python?
- 6 ответов
- Update
- В Unix-системах (включая Linux, macOS и BSD)
- В системах Windows
- Python-сообщество
- #1 Фев. 5, 2015 10:46:20
- скрыть приложение в диспетчере задач
- #2 Фев. 5, 2015 23:06:31
- скрыть приложение в диспетчере задач
- #3 Фев. 6, 2015 03:11:25
- скрыть приложение в диспетчере задач
- Как запустить невидимый подпроцесс в Python?
- 2 ответа
- Ещё вопросы
- Скрыть вызов командной строки os.system в скрипте Python
- 3 ответа
Как скрыть окно консоли в python?
Я пишу IRC-бот в Python. Я хочу создать автономные двоичные файлы для Linux и Windows. И в основном я хочу, чтобы при запуске бота окно консоли должно скрываться, и пользователь не должен был видеть это окно. Что я могу сделать для этого?
6 ответов
Просто сохраните его с расширением .pyw . Это предотвратит открытие окна консоли.
В системах Windows нет понятия «исполняемый режим». Установщик Python автоматически связывает файлы.py с файлом python.exe, чтобы двойной щелчок на файле Python запускал его как скрипт. Расширение также может быть.pyw, в этом случае окно консоли, которое обычно появляется, подавляется.
В linux просто запустите его, без проблем. В Windows вы хотите использовать исполняемый файл pythonw.
Update
Хорошо, если я понимаю вопрос в комментариях, вы спрашиваете, как сделать окно команд, в котором вы запустили бот из командной строки?
Я думаю, что правильно. В любом случае, теперь вы можете закрыть терминал.
Это не основная проблема . Основная проблема заключается в том, чтобы скрыть окно консоли, когда программа работает. Как это сделать?
Измените расширение файла на .pyw, чтобы связать его с pythonw.exe oreilly.com/catalog/pythonwin32/chapter/ch20.html.
«nohup mypythonprog &» поможет мне в Linux . но Python не будет установлен на Windows-машине. Так что «start pythonw mypythonprog» не поможет мне, я думаю.
Хорошо, если Puython не установлен, у вас есть другая проблема. Вы хотите, чтобы py2exe создавал отдельный исполняемый файл. logix4u.net/Python/Tutorials/… и py2exe.org/index.cgi/FrontPage
unix ≠ Linux, unix ≠ UNIX, вышеупомянутое решение работает также для macOS и BSD (они unix), без форматирования кода.
В Unix-системах (включая Linux, macOS и BSD)
Используйте nohup mypythonprog & , и вы можете закрыть окно терминала, не нарушая процесс. Вы также можете запустить exit , если вы работаете в облаке, и не хотите оставлять зависающий процесс оболочки.
В системах Windows
Сохраните программу с расширением .pyw , и теперь она будет открыта с помощью pythonw.exe . Нет окна оболочки.
Например, если у вас есть foo.py , вам нужно переименовать его в foo.pyw .
Если все, что вы хотите сделать, это запустить Python Script на компьютере с Windows, на котором установлен Python Interpreter, преобразование расширения вашего сохраненного Script из ‘.py’ в ‘.pyw’ должно сделать трюк,
Но если вы используете py2exe для преобразования вашего Script в автономное приложение, которое будет запускаться на любой машине Windows, вам нужно внести следующие изменения в ваш файл setup.py.
Следующий пример представляет собой простой python-GUI, созданный с использованием Tkinter:
from distutils.core import setup import py2exe setup (console = ['tkinter_example.pyw'], options = < 'py2exe' : >)
Измените «консоль» в приведенном выше коде на «windows»..
from distutils.core import setup import py2exe setup (windows = ['tkinter_example.pyw'], options = < 'py2exe' : >)
Это откроет только созданный графический интерфейс Tkinter и отсутствие окна консоли.
Хотя я чувствую, что этот ответ немного не по теме для вопроса, я все равно оставил его, поскольку он отвечает на следующий вопрос (ссылка ниже), который был помечен как дубликат этого вопроса.
Я на самом деле использую pyinstaller, но он имеет опцию для того же (-w) и исправил проблему для меня.
Дополнительная информация. для ситуаций, в которых потребуется решение win32gui, опубликованное Мохсеном Хаддади ранее в этой теме:
Дополнительная информация о пакете pywin32 находится на: Как использовать модуль win32gui с Python? ,
Кроме того, чтобы применить дискрецию при закрытии окна, чтобы случайно не закрыть какое-либо окно на переднем плане, разрешение можно расширить по следующим строкам:
try : import win32gui, win32con; frgrnd_wndw = win32gui.GetForegroundWindow(); wndw_title = win32gui.GetWindowText(frgrnd_wndw); if wndw_title.endswith("python.exe"): win32gui.ShowWindow(frgrnd_wndw, win32con.SW_HIDE); #endif except : pass
Python-сообщество
- Начало
- » Python для экспертов
- » скрыть приложение в диспетчере задач
#1 Фев. 5, 2015 10:46:20
скрыть приложение в диспетчере задач
Привет всем. Необходимо запускать питоновский скрипт в фоне с иконкой, и выключить отображение его хотя бы на вкладке “Приложения” в Диспетчере задач. Насчет иконки и скрытия на панели задач решил вопрос быстро. А вот насчет диспетчера погуглил. что-то ничего не нашел.
Подскажите пожалуйста. может кто сталкивался с такой проблемой. Приложение будет работать под Windows XP/7.
Заранее спасибо
#2 Фев. 5, 2015 23:06:31
JOHN_16 От: Россия, Петропавловск-Камчатск Зарегистрирован: 2010-03-22 Сообщения: 3292 Репутация: 221 Профиль Отправить e-mail
скрыть приложение в диспетчере задач
wandors
думаю тут надо копать в сторону WinAPI, не то что бы я предлагаю оформлять процесс как Службу, но истина видимо где то в том районе может обитать.
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
#3 Фев. 6, 2015 03:11:25
скрыть приложение в диспетчере задач
import time import win32con import win32console import win32gui if "__main__" == __name__: win32gui.ShowWindow(win32console.GetConsoleWindow(), win32con.SW_HIDE) time.sleep(10) win32gui.ShowWindow(win32console.GetConsoleWindow(), win32con.SW_RESTORE)
Как запустить невидимый подпроцесс в Python?
Я хотел бы знать, можно ли запустить подпроцесс приложения Python таким образом, чтобы в диспетчере задач не было дублирования процесса?
2 ответа
Не обойтись без подрывного процесса, скрывая задачи. Если в качестве пользователя, который хочет посмотреть запущенные процессы, позвольте мне увидеть запущенные процессы. Не скрывайте это от меня. Методы, чтобы скрыть запущенные процессы, также могут быть восприняты каким-то антивирусом в качестве потенциальных угроз. Не делай этого. На самом деле, почему ты хочешь? Я не могу придумать ни одной причины, чтобы скрыть процесс для законной программы.
Я работаю над приложением с графическим интерфейсом и хочу, чтобы оно имело несколько окон. Например, если вы создаете новое окно в Opera, повторяющегося процесса нет. Это то, что я хотел бы достичь.
Возможно, они вообще не создают новый процесс. Они, вероятно, просто создают отдельное окно. Google Chrome фактически создает отдельные процессы для каждой вкладки, которые могут быть просмотрены диспетчером задач.
В Opera, безусловно, работает несколько потоков, и это именно то, что вы хотели бы сделать. В диспетчере задач вы сможете увидеть количество потоков, связанных с процессом.
Вы уверены, что этот «подпроцесс» должен быть фактически процессом? Возможно, вы могли бы выполнять работу внутри потока вместо того, чтобы развернуть новый процесс. Я не уверен, что это выполнит ваши цели, поскольку вы не знаете, для чего вам нужны несколько процессов.
Ещё вопросы
- 1 Создание пустого файла в каталоге
- 0 Как включить аргумент с API CreateProcess в VC ++?
- 1 Создайте целое число из dict внутри списка. Питон новичок
- 1 FusionCharts не рендерится в Google Chrome и Firefox
- 0 Матричный шаблон C ++, неоднозначность между умножением матрицы на матрицу и числом матриц
- 0 Angularjs debounce очищает мой радиовход
- 1 Как я могу цикл через кучу кнопок, чтобы уменьшить код?
- 0 Портирование скрипта, который отображает одну запись за раз от perl до php
- 0 как содержать файл * .tpl в переменной php?
- 1 Не удалось получить политику конфигурации приложений из Microsoft Intune в приложении для Android
- 1 Укажите имя БД / схемы Oracle в tomcat context.xml
- 1 Использование стандартного / выходного потока в качестве строки ввода / вывода
- 1 Приложение работает нормально при отладке на тестовом устройстве, но не в apk релиза, оно не получает переменные post.class из firebase
- 0 почему nl2br много
- 0 Как сократить тройной запрос ActiveRecord Joins с помощью отношения has_many?
- 1 Cordova inAppBrowser Событие «До выхода»
- 0 Проверка формы AngularJS. Невозможно прочитать свойство ‘$ validators’ из неопределенного
- 0 Обновить таблицу A с информацией о B со значением в качестве имени столбца
- 1 Невозможно отсортировать данные с Comparator в Android
- 1 Python3.5, Win32gui, Tkinter. Я не могу получить пиксель с экрана
- 1 Автоматическая установка плагинов в Android Studio
- 1 Ошибка совпадения строки со списком строк с использованием extractOne () из fuzzywuzzy в python
- 0 Передать переменную в контроллер codeigniter по умолчанию
- 0 Не могу скомпилировать тестовую программу PostgreSQL
- 1 RxJava doOnError против onError
- 1 Создать идентификатор группы для отметок времени
- 0 Mysql выберите запрос не работает должным образом
- 1 Создание новой даты из разницы / вычитание двух периодов (с отрицательным временем)
- 1 Java выбирает txt файл и использует строку insaid в функции
- 1 Расшифровывать возвращаемые ненужные данные
- 1 Невозможно просмотреть ввод пользователя при отладке ввода CQL в Cassandra
- 1 Как изменить легенду Matplotlib
- 0 Использование директивы для присоединения объекта с доступом к области видимости к элементу HTML
- 0 Сопоставить значения строки в таблице со значениями в столбце другой таблицы
- 0 javaScript Fade-In OnLoad
- 1 Обновление данных из Vuex дает бесконечный цикл в watcher
- 0 Ошибка подтверждения mfc при попытке создать страницу свойств
- 1 Преобразовать ArrayList > в jsonArray
- 0 Форма отправки onclick функции на ТД с php переменные отображаются
- 0 Выравнивание поля ввода и текстовые эффекты при выравнивании
- 0 Использование PHP для отображения таблицы HTML
- 1 Разбор XML и сохранение результатов в строке
- 0 запустите / usr / bin / mysqld_safe в фоновом режиме
- 1 Разница в форматировании подписки на события
- 1 Как проверить, что одно из многих условий выполнено на Мокито? Можно ли проверить, был ли вызван один ИЛИ другой метод?
- 0 Снимите флажок HTML с меткой
- 1 Сложная, но эффективная фильтрация массива JavaScript
- 1 Итерация по всем полям объекта в C # без отражения
- 0 Обновление номера в подсказках jQuery UI
- 0 параметр для пользовательских ссылок в jqgrid
Скрыть вызов командной строки os.system в скрипте Python
У меня есть скрипт python (myscript.py), который я запускаю на сервере linux, как показано ниже: python myscript.py В моем сценарии я использую системный вызов, пример ниже:
os.system("./myprogram.pl -x 5 > results.out")
Когда я запускаю myscript.py на сервере всякий раз, когда есть вызов os.system вызов команды отображается на сервере. Есть ли способ скрыть все командные вызовы, чтобы они не отображались при их вызове в программе ( myscript.py )? (Это не связано с тем, что скрытие вывода приводит к вызовам команд внутри программы)
Вы можете перезаписать sys .__ stdout__ или другие подобные хаки, но я думаю, что лучшим решением будет использование модуля подпроцесса — или даже библиотеки вроде invoke.
Ах, я подозреваю, что вы имеете в виду, что вывод команды виден. Я на мгновение подумал, что вы хотите скрыть процесс из списка процессов ОС. Это было не ясно.
Сервер используется большим количеством людей, и я хотел бы сохранить свою работу в секрете, включая те инструменты, которые я использую.
Почему это было закрыто? Афиша ясно показывает, что вывод уже перенаправлен на results.out. Он хочет скрыть процесс от других пользователей (от ps, top и т. Д.).
@tdelaney: тогда я приглашаю ОП уточнить это в правке, после чего, возможно, ее можно будет вновь открыть. Однако, возможно, есть и другие посты, о которых тогда говорят.
@tdelaney: в любом случае, мой голос был за то, что «неясно, что вы спрашиваете» именно по этой причине; двусмысленность относительно того, что намерение здесь.
Есть способы скрыть процесс. Я погуглил («параметры процесса selinux hide») и получил этот полезный пост среди других.
спасибо тделаней! @MartijnPieters Я попытался отредактировать пост для некоторых разъяснений. Кажется, то, что я думаю сделать, сложнее, чем я думал. Я думал, что будет какая-то команда «скрыть» / или visible = off, которую я мог бы использовать всякий раз, когда я выполняю системный вызов в моем скрипте. Я постараюсь выяснить, чем поделился tdelaney, но если это будет слишком сложно, я просто буду продолжать использовать os.system. Спасибо!
3 ответа
Вы имеете в виду, можете ли вы скрыть команду от появления в ps, top и других подобных инструментах? Нет.
В некоторых системах myprogram.pl может сам скрывать свою командную строку от появления в ps; например, в perl:
Это редактирует запись ps, а не удаляет ее. Поскольку он установлен новым процессом, есть состояние гонки, в котором кто-то может видеть его до его изменения; и возможно (возможно, для суперпользователя) получить такую же информацию другими способами. Не существует безопасного способа и не предназначено для того, чтобы полностью скрывать вашу командную строку от других пользователей.