본문 바로가기
파이썬

파이썬 하위 프로세스에서 'shell = True'의 실제 의미

by º기록 2020. 11. 21.
반응형

subprocess 모듈로 다른 프로세스를 호출하고 있습니다. 그러나 질문이 있습니다.

다음 코드에서 :

callProcess = subprocess.Popen(['ls', '-l'], shell=True)

callProcess = subprocess.Popen(['ls', '-l']) # without shell

둘 다 작동합니다. 문서를 읽은 후 shell = True 가 셸을 통해 코드를 실행한다는 것을 알게되었습니다. 즉, 부재시 프로세스가 직접 시작됩니다.

그래서 내 경우에 선호하는 것은 무엇입니까-프로세스를 실행하고 출력을 가져와야합니다. 쉘 내부 또는 외부에서 호출하면 어떤 이점이 있습니까?

 

해결 방법

 

쉘을 통해 호출하지 않는 이점은 '미스터리 프로그램'을 호출하지 않는다는 것입니다. POSIX에서 환경 변수 SHELL 은 "쉘"로 호출되는 바이너리를 제어합니다. Windows에는 bourne 쉘 하위 항목이 없으며 cmd.exe 만 있습니다.

따라서 쉘을 호출하면 사용자가 선택한 프로그램이 호출되며 플랫폼에 따라 다릅니다. 일반적으로 쉘을 통한 호출을 피하십시오.

쉘을 통해 호출하면 쉘의 일반적인 메커니즘에 따라 환경 변수와 파일 glob을 확장 할 수 있습니다. POSIX 시스템에서 쉘은 파일 glob을 파일 목록으로 확장합니다. Windows에서 파일 glob (예 : "*. *")은 어쨌든 쉘에 의해 확장되지 않습니다 (그러나 명령 줄의 환경 변수는 cmd.exe에 의해 확장 됩니다).

환경 변수 확장 및 파일 glob을 원한다고 생각되면 셸을 통해 하위 프로그램 호출을 수행 한 네트워크 서비스에 대한 1992 년의 ILS 공격을 조사하십시오. 예를 들면 ILS 와 관련된 다양한 sendmail 백도어가 있습니다.

요약하면 shell = False 를 사용합니다.

 

참조 페이지 https://stackoverflow.com/questions/3172470

 

 

반응형

댓글