web-dev-qa-db-ja.com

Python pexpect子からの出力の読み方?

child = pexpect.spawn ('/bin/bash')
child.sendline('ls')
print(child.readline())
print child.before, child.after

私の出力でこのコードで得られるのは

ls

ls 

しかし、私のコードが

child = pexpect.spawn('ls')
print(child.readline())
print child.before, child.after

その後、動作しますが、最初の2枚の印刷のみです。間違った送信コマンドを使用していますか? send、write、sendlineを試しましたが、もう見つかりませんでした。

21
user2579116

Pexpectでは、beforeおよびafter属性はexpectメソッドの後に設定されます。この状況で使用される最も一般的なことは、プロンプトを待つことです(したがって、前のコマンドの実行が終了したことがわかります)。したがって、あなたの場合、コードは次のようになります。

child = pexpect.spawn ('/bin/bash')
child.expect("Your bash Prompt here")
child.sendline('ls')
#If you are using pxssh you can use this
#child.Prompt()
child.expect("Your bash Prompt here")
print(child.before)
17
Catalin Luta

以下を試してください:

_import pexpect
child = pexpect.spawn('ls')
print child.read() # not readline
_

read()は、lsの出力全体を提供します。

11
mvensky
#!/usr/bin/env python

import pexpect
child = pexpect.spawn("ssh [email protected] -p 2222")
child.logfile = open("/tmp/mylog", "w")
child.expect(".*assword:")
child.send("XXXXXXX\r")
child.expect(".*\$ ")
child.sendline("ls\r")
child.expect(".*\$ ")

ログファイルを開きます:-ターミナルに行きます

$gedit /tmp/mylog
9
Reegan Miranda
import sys
import pexpect
child = pexpect.spawn('ls')
child.logfile = sys.stdout
child.expect(pexpect.EOF)

件名の手動入力を参照してください。

3
djhaskin987

必要なものは次のとおりです。

p = pexpect.spawn('ls')
p.expect(pexpect.EOF)
print(p.before)

または

p = pexpect.spawn('/bin/ls')
p.expect(pexpect.EOF)
print(p.before)

または

p = pexpect.spawn('/bin/bash -c "ls"')
p.expect(pexpect.EOF)
print(p.before)

あるいは

print(pexpect.run('ls'))
3
Stanislav

クラスspawn(SpawnBase)docstringからコピーします。おそらく、example-2が欲しいものです。

ファイルへのログの入出力の例::

child = pexpect.spawn('some_command')
fout = open('mylog.txt','wb')
child.logfile = fout

Stdoutへのログの例::

# In Python 2:
child = pexpect.spawn('some_command')
child.logfile = sys.stdout

# In Python 3, we'll use the ``encoding`` argument to decode data
# from the subprocess and handle it as unicode:
child = pexpect.spawn('some_command', encoding='utf-8')
child.logfile = sys.stdout
1
yongxu