import pexpect
import sys
try:
#initdb_cmd = pexpect.spawn('initdb -D /home/sunhuihui/data')
#initdb_cmd.logfile = sys.stdout.buffer
initdb_cmd = pexpect.spawn('initdb -D /home/sunhuihui/data',encoding='utf-8')
initdb_cmd.logfile = sys.stdout
#fout = open('output.log', 'ab')
#initdb_cmd.logfile = fout
initdb_cmd.expect('Enter new sysdba password:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Enter it again:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Enter new syssao password:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Enter it again:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Enter new syssso password:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Enter it again:')
initdb_cmd.send('a \n')
initdb_cmd.expect('Success')
initdb_cmd.wait()
except Exception as e:
print(str(e))
如果想把输出打印到到屏幕的时候回报错:
TypeError: must be str, not bytes
解决方案有两种:
直接输出bytes格式的log:
#initdb_cmd = pexpect.spawn('initdb -D /home/sunhuihui/data')
#initdb_cmd.logfile = sys.stdout.buffer
sys.stdout
defaults to expecting strings. Internal buffer is happy with bytes.
或者decode成utf-8
initdb_cmd = pexpect.spawn('initdb -D /home/sunhuihui/data',encoding='utf-8')
initdb_cmd.logfile = sys.stdout