2017-12-29 34 views
2
import subprocess 
import os 

#files 
src_file = '/../copy_me_test.txt' 
destination_file = 'paste_here.txt' 

#make copy of file 
shell_command = 'cp "%s" "%s"' % (src_file, destination_file) 
successful = subprocess.call(shell_command, shell = True) 
print(successful) 

그래서 한 디렉토리에서 다른 디렉토리로 파일을 복사합니다. subprocess.call() 메서드를 실행할 때 1을 반환합니다. 아무 일도 일어나지 않으면 터미널에 다음 메시지가 나타납니다.오류 Python Subprocess 호출 복사 파일입니다. 파일 없음, 실패, 1을 반환합니다. 왜?

cp: /Users/my_name/Desktop/python/copy_files/copy_me_test.txt: No such file or directory 
1 

여기서는 어떻게됩니까? 이 파일의 복사본을 만들지 못했기 때문에 0을 반환하지 않아야합니다. 나는 이미 문제를 해결했지만, 왜 이런 일이 일어 났는지 아는 사람이 있는지 알고 싶습니다. 모든 정보 또는 링크를 부탁드립니다. 실패 할 때

+0

사이드 노트 : 쉘 프로그램이 필요하지 않을 때는 사용하지 마십시오. "''shutil.copyfile' and friends ''(https://docs.python.org/3/library/shutil.html#shutil.copyfile)을보고 파이썬에서 직접하기 위해서는 깨지기 쉽고 힘들지 않습니다. 에러 체크/비 휴대용 외부 프로그램 사용법. – ShadowRanger

+0

나는 그것을 할 것이다. 저는 파이썬에 익숙하지 않아서 조언을 고맙게 생각합니다. 나는 당신이 의미하는 바를 "깨지기 쉽고/에러 체크하기가 어렵다/휴대용이 아닌 외부 프로그램 사용"이라고 이해하지 못한다. –

+1

실행 파일을 서브 프로세스로 호출 할 때 파이썬에서 예외를 잡는 대신 반환 코드를 캡처하여 if-else 래더의 상수, 알려진 오류 코드와 비교해야합니다. 이것은 사용하기가 어렵습니다. 스크립트가 실행되는 플랫폼에 따라 오류 코드가 다를 수도 있으므로 잠재적으로 오류가 발생할 수 있습니다. 리턴 코드는 새로운 버전의 실행 파일에서 변경되어 취약합니다. – JacaByte

답변

1
+0

정말 고마워요. 그게 확인해. 문서가 약간 혼란 스럽기는했지만 필자는 프로그램을 두 번 돌 렸으며 그 결과는 당신이 말한 것과 일치했습니다. 나는 튜토리얼을 따라 가고 있었다. 나는 그것을 오해 했음에 틀림 없다. 다시 한번 감사드립니다. –

+0

@EmmanuelCodev 문제 없습니다! 하나의 대답을 수락하는 것을 잊지 마십시오! 체크 박스로 https://i.stack.imgur.com/uqJeW.png –

1

반환 0 성공 = 당신이 속성 쉘을 사용하는 경우 경고가 있는지 확인도, 진정한 1을 반환합니다. 0은 실패하지 않습니다. 반환 코드는 0에서 4294967295까지의 32 비트 정수가 될 수 있습니다. 운영 체제에 따라 Exit status을보십시오.

때로는 부정적인 반환 코드를 설정하거나 Python 3 docs가 확인하는대로 수신 할 수 있습니다.

Popen.returncode

자식 리턴 코드, 여론 조사에서 설정()와 (대기) (간접적으로 의사 소통()). 없음 값은 프로세스가 아직 종료되지 않았 음을 나타냅니다.

음수 값 -N은 자식이 신호 N으로 종료되었음을 나타냅니다 (POSIX 만 해당).

exit(-1)의 종료 파이썬은 Windows에서 4294967295의 결과를 갖기 때문에 파이썬은 부호없는 32 비트 리턴 코드를 사용합니다.

+0

예. 내가 반환 가치의 의미를 오해 한 것을 이제 깨닫는다. 더 자세히 설명해 주셔서 감사합니다. 나는 이제 0이 성공의 표식으로 사용되는 이유를 봅니다. –