2013-04-22 3 views
0

파이썬 스크립트로 SSH를 통해 새 디렉토리를 만들려고합니다. 파이썬 커맨드 라인을 사용하여 명령을 시도 할 때 그냥 작동합니다. 그러나 스크립트로 동일한 작업을 시도 할 때 새로운 'test'폴더가 생성되지 않습니다. 스크립트의 명령을 Python cmd에 복사하여 붙여 넣기 만하면 제대로 작동하는지 확인할 수 있습니다. 그래서 스크립트로 왜 작동하지 않는지?파이썬으로 SSH를 통한 Mkdir이 작동하지 않습니다.

사용 된 코드 :

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect=('password:') 
child.sendline('MyPwd') 
child.sendline('mkdir /home/myUser/Desktop/test') 

답변

1

난 그냥 다른 라인 예를 들어

child.sendline('\n') 

그래서 전체 스크립트가

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect=('password:') 
child.sendline('MyPwd') 
child.sendline('mkdir /home/myUser/Desktop/test') 
child.sendline('\n') 
+0

pxssh 모듈을 사용할 수있는 것 외에도 pexpect.spawn을 확장하여 SSH connections.child.sendline() 설정을 전문으로 할 수 있습니다. 새 줄을 지정할 수 있습니다. 귀하의 회신에 감사드립니다. –

+0

지금 당장 명령을 실행하여 처리하는 데 시간이 걸리고 출력이 외부 파일에 저장됩니다. 이제 문제는 새로운 child.sendline()을 던지면 즉시 그 중 하나를 취해 이전 명령을 중단합니다. 다음 sendline() 명령을 사용하기 전에 대기/절전 모드로 알려주는 방법이 있습니까? 아니면 pxssh 모듈이 필요합니까? – Nicholas

+0

ok child.prompt (없음)에 사용하고 child.sendline ("ls") 명령을 보냅니다. –

0

인을 추가 할 때 작동하는 것 같다 무엇 나는 보통 그렇게한다. 이 문제는 호스트 시스템과 동기화됩니다. 내가 기계에 무엇인가를 보낸 후에 나는 보통 기계의 프롬프트로 해석되는 대답을 기대한다.

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect('password:') 
child.sendline('MyPwd') 
child.expect('YourPromptHere') 
child.sendline('mkdir /home/myUser/Desktop/test') 
child.expect('YourPromptHere') 

당신은 당신이 하나의 대상에 스크립트를 실행하는 경우, 기계의 프롬프트 YourPromptHere를 교체하거나 정기적으로 할 수 있습니다 따라서, 귀하의 경우,이 같은 뭔가를 갈 것 표현 (예 : "($ $) | (#) | (>)").

tl; dr : 내가 말한 것을 요약하면 이전 작업이 완료 될 때까지 기다렸다가 새 메시지를 보낼 때까지 기다려야합니다.