Python에서 subprocess.Popen을 호출할 때 "시스템이 지정된 파일을 찾을 수 없습니다" 발생
문제
svnmerge.py를 사용하여 일부 파일을 병합하려고 합니다.내부적으로는 Python을 사용하는데, 사용하면 "시스템이 지정된 파일을 찾을 수 없습니다."라는 오류가 발생합니다.직장 동료들은 동일한 버전의 svnmerge.py 및 Python(2.5.2, 특히 r252:60911)을 문제 없이 실행하고 있습니다.
나는 찾았다 이 링크, 내 문제를 설명합니다.거기에 설명된 내용을 시도하면서 Python이 svn을 찾을 수 있음을 확인했습니다(내 경로에 있음).
P:\>python Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> i,k = os.popen4("svn --version") >>> i.close() >>> k.readline() 'svn, version 1.4.2 (r22196)\n'
하지만 svnmerge.py 코드를 살펴보면 Python 버전 2.4 이상에서 다른 실행 경로를 따르고 있음을 발견했습니다.os.popen4 ()를 호출하는 대신 subprocess.popen ()을 사용합니다.이를 시도하면 오류가 재현됩니다.
C:\>python Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE, >>> close_fds=False, stderr=subprocess.PIPE) Traceback (most recent call last): File "", line 1, in File "C:\Python25\lib\subprocess.py", line 594, in __init__ errread, errwrite) File "C:\Python25\lib\subprocess.py", line 816, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified >>>
지금은 2.4 이상 특정 코드를 주석 처리했지만 적절한 해결 방법을 찾고 싶습니다.
확실하지 않다면 저는 완전한 Python 초보자이지만 Google은 도움이 되지 않았습니다.어떤 조언이 있습니까?
해결책
버그입니다. 문서화 subprocess.Popen
.다음 중 하나가 있어야 합니다. "shell=True
" 옵션이거나 첫 번째 인수는 시퀀스여야 합니다. ['svn', '--version']
.지금처럼, Popen
문자 그대로 "svn --version"이라는 실행 파일을 찾고 있는데 찾지 못했습니다.
하지만 동료들이 동일한 OS와 Python 버전을 실행하고 있다면 왜 그것이 동료들에게 효과가 있을지 모르겠습니다...FWIW 그것은 Mac에서 동일한 오류 메시지를 표시하며 내가 제공한 두 가지 방법 중 하나를 사용하여 문제를 해결했습니다.