subprocess.Popen()을 활용하여 다른 Python 스크립트를 호출할 때 변수를 인수로 전달하면 예기치 않은 문제가 발생할 수 있습니다. 이 문제가 발생할 수 있는 이유와 해결 방법을 조사해 보겠습니다.
제공된 코드는 변수에 저장된 인수를 사용하여 mytool.py 스크립트를 실행하려는 시도를 보여줍니다. 그러나 shell=True 매개변수가 실행을 방해할 수 있습니다.
해결책:
성공적인 변수 전달을 활성화하려면 shell=True 매개변수를 생략. Unix 환경에서 shell=True를 활성화하면 Popen()이 인수를 해석하는 방식이 수정되어 잠재적으로 원치 않는 동작이 발생할 수 있습니다.
다음은 이 문제를 해결하기 위해 수정된 코드 조각입니다.
import sys from subprocess import Popen, PIPE # populate list of arguments args = ["mytool.py"] for opt, optname in zip("-a -x -p".split(), "address port pass".split()): args.extend([opt, str(servers[server][optname])]) args.extend("some additional command".split()) # run script p = Popen([sys.executable or 'python'] + args, stdout=PIPE) # use p.stdout here... p.stdout.close() p.wait()
보안 참고 사항:
외부 입력과 관련된 명령에 shell=True 사용 보안상 위험합니다. Python 문서에 명시된 대로 이 방법은 잠재적인 취약점으로 인해 권장되지 않습니다.
위 내용은 `subprocess.Popen()`에서 변수 전달이 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!