Tôi gặp sự cố khi sử dụng subprocess.Popen hoặc subprocess.call khi tôi sử dụng chúng để thực thi dòng lệnh tạo ra nhiều đầu ra, các tập lệnh python bị treo, nhưng kỳ lạ sau khi chờ đợi một lúc, trong khi kịch bản đang ở trạng thái treo, tôi thấy rằng công việc được chỉ huy bởi dòng cmd đã được thực hiện và chỉ có kịch bản được treo ra.Python: subprocess.Popen và subprocess.call treo
subprocess.call(cmd, shell = True)
#OR
subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
# HANGS HERE
print "show something after subprocess"
Lưu ý rằng bản in cuối cùng chưa bao giờ được thực thi, nhưng thực ra cmd đã được thực thi.
Lưu ý rằng cmd có liên quan đến cổng nối tiếp, vì vậy khi tôi cắm cáp nối tiếp, mọi thứ trở nên tốt và bản in cuối cùng được thực hiện. Nhưng khi tôi sử dụng thiết bị đầu cuối tất cả mọi thứ là tốt ngay cả khi nối tiếp được cắm vào, nó chỉ xảy ra với kịch bản python.
Thanks a lot
Không có vấn đề gì khi sử dụng 'subprocess.call' nếu bạn không sử dụng' subprocess.PIPE', OP không phải là. – interjay
Nó không giải thích tại sao đầu ra của câu lệnh 'print' không được hiển thị trong phụ huynh. 'Popen()' không chờ đợi cho trẻ ngay cả khi quá trình con bị chặn trong một nỗ lực để ghi vào đường ống với bộ đệm đầy đủ. – jfs