Perl에서 Python으로 스크립트를 실행하여 원격 서버 및 장치의 특정 작업을 자동화하는 방법에 대해 생각해보십시오. Expect를 사용하여 특정 결과를 확인하고 데이터를 다시 가져올 수 있어야합니다. Paramiko-Expect를 살펴보고 나는 그것을 좋아하지만 매번 시간을 초과합니다. 나는 전체에 그것을 시도하고 직접 노드의 텍스트에 넣어에서 기대하는 프롬프트의 여러 버전을 시도했습니다paramiko가 시간 초과를 기대합니다
Traceback (most recent call last):
File "python_test.py", line 40, in <module>
main()
File "python_test.py", line 28, in main
interact.expect(PROMPT)
File "/usr/local/lib/python2.7/site-packages/paramikoe.py", line 122, in expect
buffer = self.channel.recv(self.buffer_size)
File "/usr/local/lib/python2.7/site-packages/paramiko/channel.py", line 598, in recv
raise socket.timeout() socket.timeout
:
import paramiko
from paramikoe import SSHClientInteraction
HOSTNAME = "HOST IP"
PASSWORD = "PWORD"
USERNAME = "UNAME"
PROMPT = "(node name)#"
command = "show command"
print PROMPT
file = open("testlog.txt","w")
def main():
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(HOSTNAME, port=22, username=USERNAME, password=PASSWORD)
interact = SSHClientInteraction(client, timeout=10, display=True)
interact.send(command)
interact.expect(PROMPT)
file.write(interact.current_output_clean)
client.close()
return
main()
file.close()
이
내가 얻을 역 추적입니다 정규식. 아무것도 작동하지 않습니다. client.expect에 도착하면 항상 타임 아웃됩니다. Paramiko-expect documentation이 도움이되지 않으며이 질문을 보는 유일한 다른 곳은 도움이되지 않을만큼 충분히 다릅니다. 모든 조언을 주시면 감사하겠습니다.
프롬프트에 입력하는 내용의 예로 PROMPT = "(노드 이름) #"을 넣었습니다. 난 거기에 정규식을 사용하고 그것을 볼 수 있어야 정확한 프롬프트를 설정하고 시간 초과 어느 쪽이든 얻을. 넷미코를 살펴 보겠습니다. –
확인. 어쩌면 그 정규식이 문제일까요? 내 변경 사항과 함께 귀하의 코드가 작동 ... –
내가 정규식에 설정하고 또한 정확한 프롬프트로 그것을 설정했는데, 당신처럼 않았다. 그래서 나는 그것이 왜 당신을 위해 일하고 왜 나를 위해 일하지 않는가에 관해서는 손해를보고 있습니다. 그것은 코드가 아닌 것처럼 보이므로 다른 솔루션을 찾을 것입니다. –