生成的进程的打印输出导致格式错误的输出:为什么?

问题描述 投票:0回答:2

我正在尝试使用pexpect库从另一个python程序执行一个python程序,但是我没有得到我所期望的行为。

我希望第一个程序(prog1.py)的输出实时显示在第二个程序(prog2.py)的终端上。使用child.after,我得到的输出格式错误:所有\n\r都打印在输出中,而不是正确地用作行尾。

child = pexpect.spawn('python3 /home/robb/Workspace/prog1.py')

child.expect(".*do:")
child.sendline(sys.argv[1])
print(child.after)

我在一行中获得所有输出:

b'Initializing database...\r\nDone initializing database!\r\n******************************\r\nProgram running\r\n******************************\r\n1. First Option\r\n2. Second Option\r\n\r\nPlease input number of action you want to do:'

而且,问题的答案(在这种情况下为sys.argv[1])甚至都没有出现。如何正确显示prog1的输出?

使用print(child.before),我得到的输出甚至更糟,简单地是这样:

b''
python string pexpect
2个回答
1
投票

[child.after返回一个bytes类型,而不是您期望的`str˙。

将输出转换为str

print(child.after.decode('utf8'))

1
投票

输出作为child.after对象存储在bytes中。要获取ASCII输出,请对其进行相应解码:

bytes
print(child.after.decode('ascii'))
© www.soinside.com 2019 - 2024. All rights reserved.