У меня есть ниже скрипты
1)
os.chdir("C:\\RTM3Run_Full\\Python Codes")
os.startfile("2015_RUNcvm_64_Crash.bat")
2)
for i in range(settings.loop):
....
Я хочу начать раздел «for i in range(settings.loop):» (т.е. часть 2) после того, как пакетный файл будет полностью завершен. Но он выполняет только часть 1) и часть 2) параллельно. Я знаю, что должен иметь возможность настроить функцию паузы для ожидания. Но я не знаю, сколько времени занимает часть 1). Кто-нибудь знает, есть ли другой более разумный способ запустить 1) и 2) последовательно?
Большое спасибо.






os.startfile имитирует щелчок в проводнике. Это означает, что ваш командный файл будет работать в фоновом режиме.
Замените это:
os.chdir("C:\\RTM3Run_Full\\Python Codes")
os.startfile("2015_RUNcvm_64_Crash.bat")
с помощью правильного вызова блокирующего подпроцесса, и, поскольку это пакетный файл, и вы хотите избежать shell=True, префикс cmd /c в качестве списка аргументов. Также не делайте chdir, просто используйте аргумент текущего рабочего каталога, чтобы текущий каталог не изменился:
rc = subprocess.call(["cmd","/c","2015_RUNcvm_64_Crash.bat"],cwd=r"C:\RTM3Run_Full\Python Codes")
вы можете проверить код возврата или использовать check_call для остановки с исключением, если пакетный файл возвращает ненулевой код выхода.
Мой ответ основан на этом ссылка на сайт
Предположим, что у вас есть эти команды в отдельных сценариях, вы можете сделать это:
import multiprocessing
import os
# Creating the tuple of all the processes which can be run in parallel
all_parallel_processes = ('script_A.py', 'script_B.py', 'script_C.py')
next_run = ('script_D.py')
# This block of code enables us to call the script from command line.
def execute(process):
os.system(f'python {process}')
process_pool = Pool(processes = 4)
process_pool.map(execute, all_parallel_processes)
process_pool.map(execute, next_run)
Где script.d запускается только после завершения сценариев a, b и c (они выполняются параллельно).
Наконец я нашел простое решение
1)
os.chdir("C:\RTM3Run_Full\Коды Python")
ОС.система("2015_RUNcvm_64_Crash.bat")
2)
для i в диапазоне (settings.loop): ....
Это гарантирует запуск части 2) после завершения части 1).
Спасибо всем за помощь~
Возможный дубликат Вызов внешней команды в Python