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

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

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

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

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

1답변

  • 좋아요

    2

    싫어요
    채택취소하기

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

    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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.