2012-11-01 3 views
2

저는 아무 것도 변경하지 않았다고 맹세합니다. 그러나 os.system 또는 subprocess.call을 사용하여 경로를 호출 할 때마다 "Error : file NBK.swn does not exist"오류가 발생합니다. 나는 H에서 명령 프롬프트를 열고파이썬 서브 프로세스 파일이 존재하지 않습니다.

import subprocess 
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK') 

이 정상적으로 실행에 도착 :

여기 내 코드는 잘 작동/2012/궁시렁 궁시렁 궁시렁/입력 "swanrun NBK". 동일한 코드를 실행하지만 끝에있는 'NBK'파일을 제거하면 swanrun이 실행될 예정이지만 swanrun이 성공적으로 실행되지만 물론 실행할 파일을 알지 못합니다. 도와주세요!

+0

'NBK_local.swn'은 (는) 어떤 디렉토리에 있습니까? –

+0

죄송합니다. 오타였습니다. 오류는 "오류 : NBK.swn 파일이 없습니다"입니다. NBK.swn이 H :/2012/yada yada yada/ – Matt

답변

1

"NBK"의 전체 경로를 사용하거나, 현재 작업 디렉토리 설정 다음 중 하나를

import subprocess 

path = "H:/2012/yada yada yada/" 
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK', cwd=path) 

이 편집 : 파일 인수가 응용 프로그램이에 볼 것이다 완전한 경로가 아닌 경우 은 일반적으로 미리 정의를 데이터 디렉토리 (있는 경우), 실행 파일의 디렉토리, 현재 작업 디렉토리 또는 현재 작업 디렉토리 또는 실행 파일의 디렉토리에 상대적인 일부 디렉토리. cwd 옵션은 작업 디렉토리를 설정합니다.이 디렉토리는 질문에 설명 된대로 "swanrun NBK"을 실행할 수있는 디렉토리로 설정해야합니다.

+0

에 있습니다. 불행히도이 문제가 해결되지 않았습니다 (동일한 결과). 그러나 문제는 입력 파일 (NBK.swn)의 올바른 위치를 찾지 못했다는 것을 알 수 있었기 때문에 무언가를 배우려는 것입니다. 해결 방법을 사용하여 shutil을 사용하여 입력 파일을 작업 디렉토리에 복사 한 다음 작업 디렉토리의 출력을 다시 입력 파일 디렉토리에 복사했습니다. 우아하지 않지만 작동합니다. 누구든지 적절한 해결책을 가지고 있다면, 나는 여전히 모든 귀입니다! 감사! – Matt

+0

방금 ​​예제 경로를 제공했습니다. 작업 디렉토리를 NBK.swn의 경로로 변경하거나 파일의 전체 경로를 인수로 사용하십시오. IMO, 파일을 복사하는 것은 해결책이 아닙니다. – eryksun

+0

나는 경로를 변경했다. 사실 내가 사용하는 경로 (.../yada yada yada /)는 내가 작업하고있는 것의 개인 정보를 보호하기 위해 만들어졌습니다. 아직도 workey (직장을 끝내는 나의 해결 방법을 제외하고). 그래도 고마워; 누군가 다른 제안이 있으면 여전히 관심이 있습니다. – Matt

1

서브 프로세스는 문자열이 아닌 목록을 필요로합니다. 문자열 만 제공하면 실행 파일 이름처럼 전체를 처리하고 공백으로 분할하지 않습니다. 그것은 "H :/2012/yada yada yada/swanrun"NBK라는 프로그램을 찾고 있는데, 그 제목을 가진 파일이 될 것입니다. 대신 subprocess.call(['"H:/2012/yada/yada yada/swanrun"', 'NBK'])을 실행하여 'NBK'인수로 프로그램 "H :/2012/yada/yada yada/swanrun"을로드하십시오.

관련 문제