2014-02-13 4 views
1

Итак, вот моя ситуация: я вызываю .bat-файл из сценария python. Я не уверен, что это важно, но я запускаю файл с подпроцессом модуля python. то есть создание файлаВыполнение ряда команд несинхронно из .bat-файла

subprocess.call("dir/file.bat", shell=True) 

.bat зависит от ввода данных пользователя во время выполнения сценария питона, но в целом он будет содержать ~ 30-40 строк команд для запуска в ЦМДЕ. Все эти строки кода являются точными, за исключением входных и выходных файлов для команды. Например:

start /wait metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 
start /wait metamap13 -Aq pradaxaText2.txt pradaxa2.out.txt 
start /wait metamap13 -Aq pradaxaText3.txt pradaxa3.out.txt 

Если я вызываю metamap13 40 раз одновременно, мой компьютер будет крах, потому что это так много памяти. Как вы видите, я пробовал комбо, чтобы первая строка закончилась до начала второго.

start /wait 

0 коммент. К сожалению, когда файл .bat запущен, он открывает новое окно, и как только программа закончена, окно НЕ закрывается, и поэтому вторая строка не начинается, пока я вручную не закрою новое окно cmd. Огромный объем данных, которые будут обработаны с помощью этого метода, означает, что я не всегда могу быть доступен, чтобы закрыть сотни новых окон. Я также попытался следующие:

start /wait /B metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 

Я думал/B устранит проблему с того, чтобы закрыть окно, но он по-прежнему запускает все 40 строк кода одновременно. Я думаю, что это связано с тем, что вызов metamap13 считается завершенной командой, поэтому он переходит к следующей строке, хотя метамап на самом деле все еще запущен. Поэтому я подумал о двух возможных решениях, которые я не могу понять, как реализовать:

  1. Автоматизация закрытия новых окон cmd после завершения работы metamap13.
  2. Выполнение следующей строки выполняется только после завершения metamap13.

Любые мысли были бы весьма признательны!

+0

является metamap13 ЕХ? Вы пытались запустить что-то вроде 'start/wait 'metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt " ' – PsychoData

+2

http://ss64.com/nt/start.html также говорит, что вы должны предоставить заголовок или на наименьшее значение '' '' для пустого. Он также предлагает образцы в форме «START» «/ wait [options]« C: \ Program.exe »« -a ParametersInfo »' – PsychoData

+0

вы могли бы попытаться заменить свои команды запуска на 'cmd/C metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt' –

ответ

3

процессов запускаются в metamap13 пакетного файла участвуют здесь, но попробуйте это, чтобы начать с:

call metamap13 -Aq pradaxaText1.txt pradaxa1.out.txt 
call metamap13 -Aq pradaxaText2.txt pradaxa2.out.txt 
call metamap13 -Aq pradaxaText3.txt pradaxa3.out.txt 
+0

Похоже, что это работает правильно! Спасибо! – Shakesbeery

Смежные вопросы