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 중국어 웹사이트의 기타 관련 기사를 참조하세요!