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
博客指出将输出打印到屏幕时会报错,并给出两种解决方案。一是直接输出bytes格式的log,二是将其decode成utf - 8,还给出了相应代码示例。
1214

被折叠的 条评论
为什么被折叠?



