2014-12-23 3 views
0

와 어떻게 파이썬과에코 xyz 수행 | ssh를 ... 파이썬

echo xyz | ssh [host] 

(호스트에 XYZ를 보내) 을 수행?

나는

pexpect.spawn('echo xyz | ssh [host]') 

pexpect 시도했지만 어쩌면 다른 패키지가 더 좋을 것

echo 'xyz | ssh [host]' 

을 수행하는거야?

+0

체크 아웃 [paramiko] (http://www.paramiko.org/ 파이프 라인을 에뮬레이션하는 가장 간단한 방법은 os.system 기능입니다) 당신이 파이썬으로 SSH를하고 싶다면. – Keith

답변

2

http://pexpect.sourceforge.net/pexpect.html#spawn

파이프로 명령을 실행하는 예를 제공합니다 :

shell_cmd = 'ls -l | grep LOG > log_list.txt' 
child = pexpect.spawn('/bin/bash', ['-c', shell_cmd]) 
child.expect(pexpect.EOF) 

이전 잘못된 시도가 아무도 그것에 의해 혼동되지 확인하기 위해 삭제.

+0

xyz를 호스트에 보내고 싶습니다. echo 'xyz | ssh [host] ' – quester

+0

대답을 업데이트했습니다 .... –

+0

@ user4815162342 - 이제 내 대답을 편집하고 내 의견을 삭제했습니다. 같은 것을하기 위해 신경을 써야합니까? –

0

간단한 쉘 파이프 라인을 시뮬레이트하려면 pexpect이 필요하지 않습니다.

os.system("echo xyz | ssh [host]") 

보다 파이썬 방법은 the subprocess module 사용하는 것입니다 :

p = subprocess.Popen(["ssh", "host"], 
        stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
p.stdin.write("xyz\n") 
output = p.communicate()[0] 
+0

pexpect는 출력을 구문 분석하고 프롬프트, 오류 등을 찾지 만 간단한 프로세스를 실행하면 pexpect가 과부하되지만 훨씬 더 강력합니다. –

+0

@ TonySuffolk66 동의 함. 내 답변은 OP가 간단한 쉘 파이프 라인을 포팅해야한다는 가정에 기반합니다.'echo xyz | ssh [host]'를 파이썬으로 옮긴다. 이 질문이 실제로 사실인지 또는 OP가 암호문을 입력하고 양방향으로 의사 소통하는 것과 같이 더 많은 관련 자료에 대해 'pexpect'를 필요로하는지 여부는 명확하지 않습니다. – user4815162342