한 exe 프로그램 아래 subprocess 모듈로 child 프로세스들을 붙여서 여러 프로그램을 동시에 돌리는 소스를 짜보았다. 개인 PC에서 원할 때 배치 파일이나, 정적 이미지, PyInstaller로 한번 말아준 exe 프로그램 등을 직접 돌려야 할 때 사용한 소스다.
이런 식으로 특정 경로에 프로그램이 목록화되어 있고.

각 폴더 안에는 패키징 요소인 이닛 파일도 있지만 커스텀 메인 파일도 있다. 빌트인 메소드명으로 파일을 생성해주면 main.py 경로를 찾아서 실행시키는 수고로움은 덜 수 있을듯.
ASIS 폴더 구성
- __init__.py
- main.py (또는 __main__.py)
- /기타 프로그램 파일
os 모듈로 디렉터리를 읽고 subprocess 모듈로 파이썬 프로그램을 실행시켜 보겠다.
import os
import subprocess
def run_main_py_in_folders(directory):
# 주 경로 유효성 체크
if not os.path.exists(directory):
# 콘솔에 에러 찍음
print(f"Directory '{directory}' does not exist.")
return
# 주 경로에서 하위 경로를 list() 하고 폴더가 아닌 경우는 제외
folders = [folder for folder in os.listdir(directory) if os.path.isdir(os.path.join(directory, folder))]
for folder in folders:
# main.py 파일 존재 확인
main_py_path = os.path.join(directory, folder, "main.py")
if os.path.exists(main_py_path):
try:
# 최종 경로에 있는 프로그램 파일을 파이썬으로 실행함
subprocess.Popen(["python", main_py_path])
print(f"Running main.py in '{folder}' folder...")
except subprocess.CalledProcessError as e:
print(f"Error running main.py in '{folder}': {e}")
else:
print(f"main.py not found in '{folder}' folder.")
if __name__ == "__main__":
# 주 경로
target_directory = 'C:\\...Python\\Tools\\Batches'
# 주 메소드 실행
run_main_py_in_folders(target_directory)