Subprocess.Popen()의 변수 전달 문제
변수에 저장된 인수를 subprocess.Popen()에 전달하려고 할 때 일부 사용자는 어려움을 겪습니다. 이는 특히 다음과 같은 인수를 처리할 때 그렇습니다.
servers[server]['address'] servers[server]['port'] servers[server]['pass']
아래 표시된 대로 이러한 변수를 Popen() 명령에 직접 적용하면 오류가 발생할 수 있습니다.
p = subprocess.Popen( ["python mytool.py -a ", servers[server]['address'], "-x", servers[server]['port'], "-p", servers[server]['pass'], "some additional command"], shell=True, stdout=subprocess.PIPE )
해결책: 셸 실행 비활성화
이 문제를 해결하려면 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를 사용하면 보안이 강화됩니다. 위험. 잠재적인 취약점으로부터 사용자 입력을 보호하기 위한 대체 방법을 항상 고려하십시오.
위 내용은 쉘 실행 없이 `subprocess.Popen()`에 변수를 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!