2017-01-16 15 views
0

私はリモートマシンに一連のコマンドを実行するためにpexpectを使用しており、各コマンドの終了ステータスを取得したいと考えています。しかし、私は終了ステータスを取得しようとすると、私は間違った値を取得しています。 Pexpectからpxsshを使って正しい終了ステータスを取得する方法はありますか?ここで私は出力と一緒に試したコードです。コマンドが成功しましたが、与えられた終了ステータスは255の代わりに、0Python Pexpect pxssh終了ステータスの取得

from pexpect import pxssh 

try: 
    s = pxssh.pxssh(timeout=30, maxread=2000000, options={ 
        "StrictHostKeyChecking": "no", 
        "UserKnownHostsFile": "/dev/null"}) 
    hostname = 'my_hostname' 
    username = 'username' 
    password = 'my_pass' 
    s.login (hostname, username, password, port=22, auto_prompt_reset=False) 
    s.PROMPT = '*$' 

    s.sendline('uptime') 
    s.prompt() 
    print(s.before.decode('utf-8')) 
    s.close() 
    print('s exitstatus=', s.exitstatus) 

except pxssh.ExceptionPxssh as e: 
    print("pxssh failed on login.") 
    print(e) 

出力した:

uptime 
09:10:39 up 10 days, 17:35, 4 users, load average: 0.12, 0.18, 0.16 

s exitstatus= 255 

答えて

1

.exitstatussshプロセスの終了ステータスです。コマンドの終了ステータスをsshセッションで実行する方法については、次の例を参照してください。

>>> ssh = pxssh.pxssh() 
>>> ssh.login('127.0.0.1', 'root', 'passwd') 
True 
>>> ssh.sendline('ls not-found') 
13 
>>> ssh.prompt() 
True 
>>> ssh.before 
'ls not-found\r\nls: cannot access not-found: No such file or directory\r\n' 
>>> ssh.sendline('echo $?') 
8 
>>> ssh.prompt() 
True 
>>> ssh.before 
'echo $?\r\n2\r\n' 
>>> ssh.before.split('\r\n')[1] 
'2'  <-- This is the ls command's exit status 
>>> 
+0

私の質問に正確に答えました。コマンドと出力の両方ではなく、コマンドの出力だけを印刷する方法がありますか? – MBasith

+0

1)Python関数を使って文字列を解析できます。 2)他のコマンドを送る前に 'sendline(' stty -echo ') 'を試すことができます。コメントにサンプルコードを貼り付けるのは簡単ではありません。あなたは新しい質問をすることができます。 – pynexj

関連する問題