>백엔드 개발 >파이썬 튜토리얼 >Python\의 `os.system()` 호출에서 명령 인수를 올바르게 이스케이프하는 방법은 무엇입니까?

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 05:48:02880검색

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

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

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

따옴표 사용

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

<code class="python">os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))</code>

shlex 모듈 사용

Python은 이 목적을 위해 특별히 설계된 shlex 모듈을 제공합니다. 해당 모듈의 quote() 함수는 bash를 포함하여 POSIX 셸에서 사용할 수 있도록 문자열을 적절하게 이스케이프합니다.

<code class="python">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))</code>

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

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

<code class="python">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))</code>

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

위 내용은 Python\의 `os.system()` 호출에서 명령 인수를 올바르게 이스케이프하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.