Tôi có một chương trình tương tác có tên là my_own_exe
. Đầu tiên, nó in ra alive
, sau đó bạn nhập S\n
và sau đó nó in ra alive
một lần nữa. Cuối cùng, bạn nhập L\n
. Nó thực hiện một số quá trình xử lý và thoát.tại sao python.subprocess treo sau proc.communicate()?
Tuy nhiên, khi tôi gọi nó từ tập lệnh python sau đây, chương trình dường như treo sau khi in ra 'sống động' đầu tiên.
Có ai ở đây cho tôi biết tại sao điều này xảy ra không?
// sau khi đọc những thăng sau (cảm ơn các bạn), tôi sửa đổi mã như sau:
import subprocess
import time
base_command = "./AO_FelixStrategy_UnitTest --bats 31441 --chix 12467 --enxutp 31884 --turq 26372 --symbol SOGN --target_date " + '2009-Oct-16'
print base_command
proc2 = subprocess.Popen(base_command, shell=True , stdin=subprocess.PIPE,)
time.sleep(2);
print "aliv"
proc2.communicate('S\n')
print "alive"
time.sleep(6)
print "alive"
print proc2.communicate('L\n')
time.sleep(6)
chương trình bây giờ việc suôn sẻ với người đầu tiên đầu vào 'S \ n', nhưng sau đó dừng lại, và tôi là 'L \ n' thứ hai được bỏ qua.
Có ai có thể cho tôi biết tại sao nó như thế này không?
Không phải quá trình này được khởi động lại mỗi lần gọi 'proc2'? Hoặc không gọi nó vì nó đã in trước hai người họ? Và nếu đó là trường hợp, tại sao là đóng băng sau khi in đầu tiên và không phải là thứ hai? – Anthony
@Anthony: Không. Quá trình này không được khởi động lại. Nó bị đóng băng sau lần in đầu tiên bởi vì 'communication' đang chờ quá trình kết thúc, nhưng quá trình không bao giờ kết thúc bởi vì nó có thể bị kẹt trên dấu nhắc thứ hai (một nơi mà' 'L \ n'' nên được nhập vào). – nosklo
cảm ơn. dù sao, điều này chỉ giải quyết một phần vấn đề, tôi có thể sử dụng giao tiếp chỉ một lần, đúng không? nếu tôi cần tương tác đọc và viết và đọc và viết, "output = p.communicate ('S \ nL \ n') [0]" không thể hoạt động, đúng không? –