"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python\의 `os.system()` 호출에서 명령 인수를 올바르게 이스케이프하는 방법은 무엇입니까?

Python\의 `os.system()` 호출에서 명령 인수를 올바르게 이스케이프하는 방법은 무엇입니까?

2024-11-02에 게시됨
검색:632

How to Properly Escape Command Arguments in Python\'s `os.system()` Calls?

os.system() 호출에서 명령 인수 이스케이프

Python에서 os.system()으로 작업할 때 적절한 인수 처리를 보장하는 것은 중대한. 파일 및 기타 매개변수는 셸 명령과의 간섭을 방지하기 위해 이스케이프가 필요한 경우가 많습니다. 다음은 다양한 운영 체제 및 셸, 특히 bash에 대한 인수를 효과적으로 이스케이프 처리하기 위한 포괄적인 가이드입니다.

따옴표 사용

가장 간단한 해결책은 인수를 따옴표로 묶는 것입니다. 작은따옴표(')는 쉘 확장을 방지하고, 큰따옴표(")는 변수 대체를 허용하지만 인용 문자열 내의 변수 확장을 억제합니다. 이 접근 방식은 bash를 포함하여 다양한 플랫폼과 쉘에서 널리 지원됩니다:

os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))

shlex 모듈 사용

Python은 이 목적을 위해 특별히 설계된 shlex 모듈을 제공합니다. quote() 함수는 bash:

import shlex

escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))

파이프 모듈 사용(지원 중단 경고!)

Python 버전 2.x 및 3.x 최대 3.10의 경우pipe.quote 더 이상 사용되지 않는 파이프 모듈은 shlex.quote의 대안으로 사용될 수 있습니다. Python 3.11부터 파이프는 제거 대상으로 표시됩니다.

from pipes import quote

escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))

일반적으로 보안상의 이유로 사용자 생성 입력은 적절한 유효성 검사 및 삭제 없이 시스템 호출에 직접 연결되어서는 안 됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3