Python에서 subprocess.Popen을 호출할 때 "시스템이 지정된 파일을 찾을 수 없습니다" 발생

StackOverflow https://stackoverflow.com/questions/36324

  •  09-06-2019
  •  | 
  •  

문제

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에서 동일한 오류 메시지를 표시하며 내가 제공한 두 가지 방법 중 하나를 사용하여 문제를 해결했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top