저는 Windows 컴퓨터에있는 bash 스크립트를 실행할 python 스크립트를 작성하려고합니다. 지금까지 나는 Cygwin 터미널을 사용하여 bash 스크립트 RunModels.scr을 실행 했으므로 ./RunModels.scr
처럼 쉽습니다. 이제는 subprocess
의 Python을 사용할 수 있기를 원하지만, Windows에는 bash를 처리 할 수있는 기능이 없기 때문에 무엇을해야할지 모르겠습니다. 나는 원래 쓴 ./RunModels.scr <validationInput> validationOutput
Windows의 Python에서 bash 스크립트를 실행하십시오.
모방하려고
이 :
os.chdir(atm)
vin = open("validationInput", 'r')
vout = open("validationOutput", 'w')
subprocess.call(['./RunModels.scr'], stdin=vin, stdout=vout, shell=True)
vin.close()
vout.close()
os.chdir(home)
하지만 내 액세스가 거부 된 이유를 알아 내려고 잠시 지출 후, 나는 내 문제는 파일이 아닙니다 실현 퍼미션 (permission)하지만, 일반적으로 Windows에서 bash 파일을 실행하려고 시도했다는 사실. 누군가가 파이썬 스크립트를 사용하여 Windows에서 입출력을 지시하는 bash 스크립트를 실행하는 방법을 설명해 주시겠습니까?
편집 (후속 질문) : 응답에 대한
덕분에, 나는 처음 PARAM로 내 bash.exe의 전체 경로를 필요로했다. 이제 RunModels.scr 내에서 명령 줄 호출은 파이썬 출력에 command not found
으로 돌아옵니다. 예를 들어, ls
, cp
, make
. 이것에 대한 제안?
# 2을 따르 나는이 내 전화를 업데이트 : 지금 얻을
subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')
오류가 /usr/bin/bash: RunModels.scr: No such file or directory
입니다. cwd를 사용하면이 오류에 아무런 영향을 미치지 않는 것 같습니다. 서브 프로세스가 /usr/bin/bash
인 경우 RunModels.scr
을 찾습니다.
셀프 ANSWERED 나는 호출에 RunModels.scr의 경로를 지정뿐만 아니라 cwd
를 사용하는 데 필요한 .
그러나 또 다른 문제
subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'C:\\path\\dir_where_RunModels\\RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')
RunModels.scr
이 잘못된 디렉토리에있는 것처럼
는 관계없이 cwd
를 지정, RunModels.scr
에 의해 실행 명령이 오류를 던지고있다. 스크립트가 실행되지만 cp
및 cd
은 no such file or directory
이라는 오류를 발생시킵니다. RunModels.scr
이 명령 행을 통해 어디로 이동하면이 오류가 발생하지 않는 구식 방식으로 실행합니다.
* bash * 스크립트이므로 Windows 경로 구문을 사용하여 전체 경로와 함께 bash 명령을 명시 적으로 호출해야합니다. –
알림 : 파일을 열 때'with' 문을 사용하는 것이 더 좋습니다. 그렇게하면 예외가 발생할 때 열어 두지 않게됩니다. –