2014-10-24 2 views
0

저는 Python에서 Postfix 서버의 메일을 가져 오는 스크립트를 사용합니다. 이 스크립트는 메일을 가져오고, 헤더를 제거하고 이메일 본문 만 남깁니다. 그런 다음이 본문을 사용하여 os.system()의 linux 명령을 실행합니다. 예를 들어 mkdir folder으로 이메일을 보내고 스크립트에서이를 만듭니다.python에서 os.system()을 사용하여 linux 명령 실행

메일로 ls을 보낼 때 문제가 발생했습니다. 나는 이메일에서 이름을 ^M을 추가 원인 : not found ls

두 번째 문제는 mkdir 함께 응답을 가지고있다. 예를 들어 mkdir folder을 보내면 "folder?"이 생성되었습니다.

의견이 있으십니까?

+0

'os.system ("ls")'이 완벽하게 작동하기 때문에 몇 가지 코드를 보여줄 수 있습니까? – matsjoyce

+3

이 작업을 위해'email'과'smtplib '모듈을 사용해보십시오. 또한 아무도 당신의 이메일 주소를 알아 내고'rm -rf /'를 보냈 으면 좋겠다. –

+0

서브 프로세스는 같은 반응을 보였다. 본문을 떠나 os.system을 실행하는 부분입니다. 이전은 이메일을 가져 오는 것입니다. ! 이 페이로드를 계속 : part.get_content_subtype은() = '일반'이 경우 을 계속 : msg.walk의 부분 는() : part.get_content_maintype() == '다중이'경우 메일 의 몸을 #print = part.get_payload() 페이로드 인쇄 os.system (페이로드) os.system ("ls")을 사용하면 작동하지만 변수가 필요합니다. – mac

답변

2

이미 문제를 확인했습니다. 예상하지 못한^M 문자가 이메일에 있습니다. (CR LF는 일반적인 줄 끝 글자 규칙이며 유닉스는 보통 CR을 좋아하지 않는다.)

명령에서 "\ r"을 제거하십시오 : command = command.translate(None, "\r").

전자 메일로 전달되는 명령을 실행하는 보안 의미를 신중하게 고려할 것을 촉구합니다. 성취하려는 일을하는 데 훨씬 안전한 방법이있을 수 있습니다.

+0

대단히 감사합니다! payload = payload.translate (None, "\ r")를 추가하고 두 가지 문제를 모두 해결했습니다. – mac

관련 문제