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
'파이썬' 카테고리의 다른 글
파이썬 sys.argv [1], IndexError : 목록 인덱스가 범위를 벗어났습니다. (0) | 2020.11.21 |
---|---|
파이썬 우분투에 HDF5 및 pytables 설치 (0) | 2020.11.21 |
파이썬 OperationalError : 데이터베이스가 잠겨 있습니다. (0) | 2020.11.21 |
파이썬 목록 내에서 항목을 이동 하시겠습니까? (0) | 2020.11.21 |
파이썬 Python으로 minidom으로 요소 값 가져 오기 (0) | 2020.11.20 |
댓글