2016-06-30 3 views
0

pexpect을 사용하여 로그인 한 원격 서버에서 명령을 실행하고 문자열 형식으로 결과를 변수에 저장할 수 있습니까? ?원격 서버에서 명령 실행 및 결과를 Python 스크립트의 문자열 변수에 저장

COMMAND_PROMPT = '[#$] ' 
TERMINAL_PROMPT = '(?i)terminal type\?' 
TERMINAL_TYPE = 'vt100' 
SSH_NEWKEY = '(?i)are you sure you want to continue connecting' 

child = pexpect.spawn('ssh -l %s %s'%(loginuser, servername)) 
i = child.expect([pexpect.TIMEOUT, SSH_NEWKEY, COMMAND_PROMPT, '(?i)password']) 

if i == 0: # Timeout 
    print('ERROR! could not login with SSH. Here is what SSH said:') 
    print(child.before, child.after) 
    print(str(child)) 
    sys.exit (1) 

if i == 1: # In this case SSH does not have the public key cached. 
    child.sendline ('yes') 
    child.expect ('(?i)password') 

if i == 2: 
    # If a public key was setup to automatically login 
    pass 

if i == 3: 
    child.sendline(password) 
    # Now we are either at the command prompt or 
    # the login process is asking for our terminal type. 
    i = child.expect ([COMMAND_PROMPT, TERMINAL_PROMPT]) 
    if i == 1: 
     child.sendline (TERMINAL_TYPE) 
     child.expect (COMMAND_PROMPT) 

지금 내가에 로그인 서버에서 다음 명령을 실행하고 내 파이썬 스크립트에서 문자열로 결과를 저장한다고 가정 :

나는 다음과 같은 방법으로 서버에 대한 연결을 만든 자체 :

ps -ef|grep process1 

어떻게 수행 할 수 있습니까?

+0

당신이 정당성을 중요시한다면'pidof process1'을 원한다. – tripleee

+0

내 스크립트에서 ** 로그인 한 서버에서 ** pidof process1' **을 실행하고 현재 ** 내 스크립트 **가있는 서버가 아닌 경우 어떤 명령을 사용해야하며 결과를 a로 저장해야합니까? 문자열 –

답변

0

read() 기능을 사용하면 전체 출력을 제공합니다.

result = child.read() 
1

나는 이것이 도움이 될 것이라고 생각합니다.

import subprocess 
import sys 

url="http://www.anyurlulike.any" 
# Ports are handled in ~/.ssh/config since we use OpenSSH 
COMMAND="uname -a" 
ssh = subprocess.Popen(["ssh", "%s" % url, COMMAND], 
        shell=False, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE) 

result = ssh.stdout.readlines() 
if result == []: 
error = ssh.stderr.readlines() 
print >>sys.stderr, "ERROR: %s" % error 
else: 
print result 
+0

하위 프로세스 : 명령을 실행하는 기본 Python 라이브러리입니다. ssh를 실행하고 원격 서버에서 필요한 모든 작업을 수행 할 수 있습니다. –