파이썬 shell=True 이 무엇을 하는지 잘 모르겠습니다

조회수 5668회

파이썬(Python 2.6.x 버전)을 이용해서 쉘 스크립트를 짜보고 있는데요.

subprocess 패키지를 사용했습니다. 검색을 해보니 shell=True를 사용하는 사람도 있고 사용을 안하는 사람도 있어서요. 차이를 모르겠습니다.

subprocess.call("date", shell=True)
subprocess.call("date")

의 결과 값이 같습니다. 무슨 역할을 하는지 모르겠네요..

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    병령어에 인자를 넘겨줄 때 차이가 납니다.

    shell = True로 실행하시게 되면 일반적으로 shell에서 명령을 내리는 것 처럼 별도의 유효성 검사 없이 실행이 되기 때문에 shell injection에 취약하게 됩니다.

    아래처럼 명령어에 추가로 인자를 주시면 차이점 확인이 가능합니다.

    shell = True의 경우

    >>> call("ls /", shell = True)
    Applications                    System                          Volumes                         dev                             installer.failurerequests       private                         usr
    Library                         TMVersion.ini                   bin                             etc                             net                             sbin                            var
    Network                         Users                           cores                           home                            opt                             tmp
    0
    

    shell = False의 경우

    >>> call("ls /", shell = False)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 523, in call
        return Popen(*popenargs, **kwargs).wait()
      File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 711, in __init__
        errread, errwrite)
      File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1343, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    
    

    아래 문서에 더 자세한 설명이 있습니다.

    https://docs.python.org/2/library/subprocess.html

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)