tôi đang đi qua một số đầu vào cho một quá trình với Pexpect với đoạn mã sau:pexpect không thể vượt qua đầu vào hơn 1024 ký tự?
p = pexpect.spawn('cat', timeout=5.0)
p.maxread = 5000
p.setecho(False) # prevent the process from echoing stdin back to us
INPUT_LEN = 1024
p.sendline('a'*INPUT_LEN)
print p.readline() # pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
Khi INPUT_LEN < 1024, tất cả mọi thứ hoạt động tốt, nhưng cho> = 1024 ký tự, quá trình này không nhận được đầy đủ nhập, gây ra lỗi "pexpect.TIMEOUT" trên p.readline().
tôi đã cố gắng tách đầu vào của tôi thành từng miếng nhỏ hơn 1024 ký tự, nhưng điều này có cùng một vấn đề:
p = pexpect.spawn('cat', timeout=5.0)
p.maxread = 5000
p.setecho(False)
INPUT_LEN = 1024
p.send('a'*1000)
p.sendline('a'*(INPUT_LEN-1000))
print p.readline() # pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
Có ai biết làm thế nào để làm cho công việc Pexpect với đầu vào hơn 1.024 ký tự? Tôi đã thử nhìn vào nguồn, nhưng nó chỉ có vẻ được gọi là os.write (...).
(Là một lưu ý phụ, tôi đã nhận thấy lỗi cắt ngắn giống nhau xảy ra khi tôi chạy "mèo" từ trình bao và cố gắng dán> = 1024 ký tự bằng "Cmd + V". Tuy nhiên, mọi thứ hoạt động tốt nếu Tôi chạy "pbpaste | cat".)
Cảm ơn!
Cập nhật: Các cuộc gọi đến "os.write()" lợi nhuận 1025, cho thấy một sự ghi thành công, nhưng os.read() trả về "\ x07" (đĩa đơn nhân vật BEL), và sau đó bị treo trên cuộc gọi tiếp theo, dẫn đến thời gian chờ.
Chia cuộc gọi os.write() thành hai byte ghi 1024 byte() s, cách nhau bằng một cuộc gọi đến os.fsync(), không thay đổi bất cứ điều gì.
'pexpect.spawn' nên có một' từ khóa maxdata' theo mặc định thiết lập cho '2000', vì vậy có lẽ điều này sẽ không áp dụng đối với trường hợp của bạn, nhưng bạn đã thử tăng nó ? –
Thật không may là không hoạt động; xem chỉnh sửa mới nhất – tba
Xin lỗi vì sự nhầm lẫn, tôi đã viết maxdata nhưng tôi có nghĩa là 'maxread', cũng rất đáng thử tôi đoán. –