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