파이썬 subprocess 사용 질문드려요.

조회수 2224회

subprocess가 다른 py파일 실행하는 걸로 알고있는데요, 실제 A1.py 실행하면 B1.py파일만 열리고 A1의 화면에 "안녕하세요"라고 출력은 되지 않더라고요..

콘솔로 경로가서 python B1.py는 가능한지라 앞에 python을 붙여 봤지만 잘 안되내요ㅠ filepath = "C:/python B1.py"

제가 원하는 것은 A1.py에서 run 하면 subprocess(다른 py파일 실행하는 거.) 이용해 B1.py 를 실행하려하는데, 관련 정보나 방법 공유해주시면 감사하겠습니다.

A1.py

import subprocess

filepath = "C:/B1.py"
aaa = subprocess.check_output(filepath, shell=True)
print(aaa)

B1.py

print("안녕하세요")
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 여기저기 계속 찾아 보다가 에러 해결했습니다. 콘솔창에서 경로로 들어가서 마지막에 python B1.py로 실행하는 방식인줄알고, 'C:/ python B1.py' 이렇게 했었는데, python을 맨앞에 'python C:/B1.py'이렇게 해야 하더라고요.. 그리고 여러가지 에러가 있었는데,, subprocess 할 때 경로의 '폴더명에 띄어쓰기'가 있으면 그것 만으로도 에러가 났어요.. 그리고 실행할 B.py 파일이 python3, python2 코드를 쓰느냐에 따라서도, 앞에 'python3 경로', 'python 경로' 이렇게 써줘야 하더라고요.. 그리고 한글 인코딩이라고 해서 한글이 포함된 실행 파일은 앞에 주석처리 혈태로 # -*- coding: euc-kr -*- 써줘야 에러가 잡혔습니다. 알 수 없는 사용자 2018.10.26 13:04

1 답변

  • subprocess는 command line 명령어를 직접 입력받으므로 check_output의 args는 실행 커맨드 형태로 입력되어야 합니다.

    import subprocess
    
    filename = 'subproc.py'
    
    # $ python subproc.py 의 형태가 되어야 하므로
    stdout = subprocess.check_output(["python", filename])
    
    print(stdout)
    

    제 환경이 MacOS라 Windows와는 달라 적지는 않았는데 subproc.py를 executable 형태로 만들고 실행하도록 하는 방식도 가능하겠네요.

    뭐... 임의의 명령어를 받는 함수이니 다양한 형태가 가능합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)