Как избежать консольного окна.pyw файл, содержащий ОС.системный вызов?
если я сохраню свои файлы кода как .pyw
, окно консоли не появляется - это то, что я хочу - но если код включает вызов os.system
, Я все еще получаю надоедливое окно консоли. Я предполагаю, что это вызвано вызовом os.system
. Есть ли способ выполнить другие файлы из my .pyw
скрипт без поднятия окна консоли вообще?
6 ответов
вы можете попробовать использовать подпроцесс модуль (subprocess.Popen
, subprocess.call
или что угодно) с аргументом shell=True
Если вы хотите избежать запуска окна консоли.
вы должны использовать subprocess.Popen
класс, проходящий как startupinfo
экземпляр значения параметра subprocess.STARTUPINFO
класс удерживая subprocess.STARTF_USESHOWWINDOW
флаг и
решение, которое описывает Петр, на самом деле не так сложно, как может показаться. Вот пример, где startupinfo
перешло к check_call
вызов для подавления окна консоли:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
subprocess.check_call(cmd, startupinfo=startupinfo)
С удобных функций call
, check_call
и check_output
вперед Их **kwargs
до Popen
конструктор, не требуется использовать Popen
напрямую.
люди немного ленивые... Я бы спасибо @Piotr Dobrogost и @Frank S. Thomas на их ответы.
Я пришел с этим кодом, который работает в Linux и Windows:
import platform
import subprocess
startupinfo = None
if platform.system() == 'Windows':
import _subprocess # @bug with python 2.7 ?
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = _subprocess.SW_HIDE
позже...
args = [exe, ...]
out = subprocess.check_output(args, startupinfo=startupinfo)
Спасибо ребята ;)
дополнительно: обратите внимание, что следующий код с помощью "вызова" также работает на Python 2.7 (В Windows) с кодом "startupinfo" выше:
def run_command(cmd, sin, sout):
print "Running cmd : %s"%(" ".join(cmd) )
return subprocess.call( cmd, stdin=sin, stdout=sout, startupinfo=startupinfo)
Кажется, что " os.popen ' не создает окно консоли. Скрипт работает под 'pythonw'. Не уверен во всех случаях, но в моем случае это работает хорошо.
os.popen(command)
похоже на то, что @воочию сказал, я читал на форумах wxPython-user, что вы "заменяете" текущее запущенное приложение, которое было бы "command.com "или" CMD.exe", с pyw.exe или pythonw.ехе, когда вы используете что-то вроде следующего:
os.execl(sys.executable, *([sys.executable]+sys.argv))
посмотреть следующий пост
хотя я не знаю, как вы бы трубу io в этом случае.
Я считаю, что одним из преимуществ этого подхода является то, что вы запускаете свой скрипт несколько раз ваша панель задач ОС не заполняется значками CMD. Другой способ, если у вас есть несколько CMD, свернутых на панели задач и начать их закрывать, невозможно сказать, какой CMD идет с каким pythonw скриптом.