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


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

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

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

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

  • 2016년 07월 25일에 작성됨
    Software Engineer

조회수 213


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

  • 2016년 07월 25일에 작성됨
    프로그래밍 언어를 좋아하는 프로그래머

  • 감사합니다.    김선우   2016.7.25 15:16     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close