Выполнить несколько программ последовательно в одной командной строке Windows?

Мне нужно запускать несколько программ один за другим, и каждый из них запускается в окне консоли. Я хочу, чтобы окно консоли было видимым, но для каждой программы создается новое окно. Это раздражает, потому что каждое окно открывается в новом положении, из которого другое закрывается, и крадет фокус при работе в Eclipse.

Это начальный код, который я использовал:

def runCommand( self, cmd, instream=None, outstream=None, errstream=None ): proc = subprocess.Popen( cmd, stdin=instream, stdout=outstream, stderr=errstream ) while True: retcode = proc.poll() if retcode == None: if mAbortBuild: proc.terminate() return False else: time.sleep(1) else: if retcode == 0: return True else: return False 

Я переключился на открытие командной строки с помощью команды «cmd» при вызове subprocess.Popen и вызове proc.stdin.write (b'program.exe \ r \ n '). Это, похоже, решает проблему с одним командным окном, но теперь я не могу сказать, когда первая программа будет выполнена, и я могу запустить вторую. Я хочу остановить и допросить файл журнала из первой программы перед запуском второй программы.

Какие-нибудь советы о том, как я могу это достичь? Есть ли еще один вариант для запуска программ в одном окне, который я еще не нашел?

  • Получить другие размеры окон рабочих процессов в Python
  • Почему мой микшер PyGame не звучит ,?
  • Добавьте каталог в sys.path Python, чтобы он включался каждый раз, когда я использую Python
  • 'pip setup.py bdist_wheel' больше не строит принудительные нечистые колеса
  • Есть ли доступная документация на разъеме pywin32 odbc?
  • перенаправление stdout с ctypes
  • привязки python gstreamer для окон
  • Как настроить setuptools для python 2.6 на Windows?
  • 2 Solutions collect form web for “Выполнить несколько программ последовательно в одной командной строке Windows?”

    Поскольку вы используете Windows, вы можете просто создать пакетный файл, в котором перечислены все программы, которые вы хотите запустить, которые будут выполняться в одном окне консоли. Поскольку это пакетный скрипт, вы можете делать такие вещи, как положить в него условные операторы, как показано в примере.

     import os import subprocess import textwrap # create a batch file with some commands in it batch_filename = 'commands.bat' with open(batch_filename, "wt") as batchfile: batchfile.write(textwrap.dedent(""" python hello.py if errorlevel 1 ( @echo non-zero exit code: %errorlevel% - terminating exit ) time /t date /t """)) # execute the batch file as a separate process and echo its output kwargs = dict(stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) with subprocess.Popen(batch_filename, **kwargs).stdout as output: for line in output: print line, try: os.remove(batch_filename) # clean up except os.error: pass 

    В разделе 17.5.3.1. Константы в документации модуля подпроцесса содержат описание subprocess.CREATE_NEW_CONSOLE константа:

    Новый процесс имеет новую консоль, а не наследует консоль своего родителя (по умолчанию).

    Как видим, по умолчанию новый процесс наследует консоль своего родителя. Причина, по которой вы наблюдаете открытие нескольких консолей, – это тот факт, что вы вызываете свои сценарии из Eclipse, который сам не имеет консоли, поэтому каждый подпроцесс создает свою собственную консоль, так как нет никакой консоли, которую он мог бы наследовать. Если кто-то захочет моделировать это поведение, достаточно запустить скрипт Python, который создает подпроцессы с использованием pythonw.exe вместо python.exe . Разница между ними состоит в том, что первая не открывает консоль, а вторая -.

    Решение состоит в том, чтобы иметь вспомогательный скрипт – назовем его launcher – который по умолчанию создает консоль и запускает ваши программы в подпроцессах. Таким образом, каждая программа наследует одну и ту же консоль от своего родителя – пусковой установки . Чтобы последовательно запускать программы, мы используем Popen.wait() .

    — script_run_from_eclipse.py —

     import subprocess import sys subprocess.Popen([sys.executable, 'helper.py']) 

    — helper.py —

     import subprocess programs = ['first_program.exe', 'second_program.exe'] for program in programs: subprocess.Popen([program]).wait() if input('Do you want to continue? (y/n): ').upper() == 'N': break 
    Interesting Posts

    Итерация через пары элементов в списке Python

    Как поместить строку с ведущими нулями в Python 3

    Scipy map_ согласовывает билинейную интерполяцию по сравнению с интерполяцией интерполяции и интерполяции IDL

    Numpy – массив против asarray

    Идеальный метод для отправки нескольких HTTP-запросов по Python?

    Как проверить, может ли файл быть создан в данной директории в MS XP / Vista?

    Могу ли я использовать __init__.py для определения глобальных переменных?

    Python, Timeout of Try, За исключением утверждения после X секунд?

    Использование коэффициента блокировки для RSA в pycrypto

    Производительность numpy.searchsorted плоха на структурированных массивах

    Как создавать объекты на лету в python?

    Учитывая файл python .pyc, есть ли инструмент, который позволяет мне просматривать байт-код?

    Портативный способ обнаружения количества * полезных * процессоров в Python

    setattr и getattr с методами

    Нужен простой пример «Hello World» с использованием библиотеки Webkit в Python

    Python - лучший язык программирования в мире.