2009-07-24 6 views
1

나는 프로그램을 실행하는 데 파이썬을 사용하려고합니다.파이썬 Popen 어려움 : 파일을 찾을 수 없습니다

WindowsError: [Error 2] The system cannot find the file specified

프로그램이 존재하고 내가 사본을 가지고 있고 EXE에 절대 경로를 탐색기에서 직접 붙여 :이 작은 SNIPPIT을 실행

from subprocess import Popen 
sa_proc = Popen(['C:\\sa\\sa.exe','--?']) 

오류를 제공합니다. 나는 다른 것을 시도해 보았다. 파이썬 스크립트가있는 소스 폴더에 EXE를 넣고 './sa.exe'를 사용하면 작동한다는 것을 알았다. 내가 생각할 수있는 유일한 점은 별도의 파티션 (F :)에서 파이썬 스크립트 (및 파이썬)를 실행하고 있다는 것입니다.

아이디어가 있으십니까? 감사합니다.

+1

관련없는 참고 사항 : 원시 문자열을 사용하여 백 슬래시를 이스케이프 처리하지 않아도됩니다. r'C : \ sa \ sa.exe ' – liori

+0

명령 프롬프트에서와 같은 방법으로이 파일을 실행할 수 있습니까? – liori

+0

파티션 문제가 아닌 것 같습니다. 나는 다른 드라이브에 exe를 넣고 Popen으로 성공적으로 돌렸다. –

답변

7

the docs "Windows의 경우 Popen 클래스는 CreateProcess()를 사용하여 문자열에서 작동하는 하위 프로그램을 실행하고 args가 시퀀스 인 경우 list2cmdline() 메서드를 사용하여 문자열로 변환됩니다. ". 어쩌면 그 방법은 일을 망치는, 그래서 왜 간단한 접근 시도하지 :이 여전히 다음, 실패하면

sa_proc = Popen('C:\\sa\\sa.exe --?') 

을 : 당신이 시도 직전에 os.environ['COMSPEC'] 무엇? 만약 , shell=TruePopen의 인수에 추가하면 어떻게됩니까?

편집는 : - 두 배의 - 'SA가'스팸 어쌔신 철자 실제로 프로그램이었다 같은 간단한 잘못 spellling의 경우로 분명히 밝혀과 영업 이익은 스팸 어쌔신 된 서면 무슨 - 이중 하나 하지만 한 번에 두 번째.

+0

제안한대로 정규 문자열로 변환하면 작동하지 않습니다. (C : \\ spamassasin \\ spamassasin.exe -? ', shell = True) 출력 :'C : \ spamassasin \ spamassasin.exe '가 내부 또는 외부 명령, 작동 가능 프로그램 또는 배치 파일로 인식되지 않습니다. –

+0

철자가 SpamAssassin입니다 - 두 번 두 번 쓰고 - 당신이 쓰고있는 것은 스팸 어쌔신 - 한 번에 두 번이지만 한 번에 두 번 쓰는 것입니다. 그에 따라 내 대답 편집. –

+0

결국이 문제는 필자가 디렉토리/파일 이름을 복사/붙여 넣기 한 이후로 이상하게 들리지만 여전히 효과가 없었습니다. 감사! –

0

C : \ sa \ sa.exe를 실행할 수있는 권한이 없을 수도 있습니다. 수동으로 프로그램을 실행 해 보셨습니까?

+0

프로그램이 수동으로 실행될 때 실행됩니다. 이 사용자 계정은 관리자 권한을 가지고 있으며 실행하려고하는 exe를 만든 사용자와 동일합니다. –

관련 문제