>백엔드 개발 >파이썬 튜토리얼 >`subprocess.Popen()`에서 변수 전달이 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

`subprocess.Popen()`에서 변수 전달이 실패하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-28 22:17:13231검색

Why Does Variable Passing Fail in `subprocess.Popen()` and How Can I Fix It?

subprocess.Popen() 인수의 변수 전달 문제 해결

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

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