tôi có mã này:python subprocess ẩn stdout và chờ nó để hoàn thành
def method_a(self):
command_line = 'somtoolbox GrowingSOM ' + som_prop_path
subprocess.Popen(shlex.split(command_line))
......
def method_b(self): .....
....
và muốn tất cả các bạn thấy đấy, method_a có một tiến trình con được gọi chương trình somtoolbox. Nhưng chương trình này có một stdout dài, và tôi muốn giấu nó. Tôi cố gắng:
subprocess.Popen(shlex.split(command_line), stdout=subprocess.PIPE)
Nhưng nó trở lại câu này:
cat: record error: Broked Pipe
(đây là một bản dịch của câu portuguese: "mèo: Erro de gravação: Ống quebrado") (Tôi đến từ brazil)
Ngoài ra, tôi có các phương thức khác (như method_b ở đó), được gọi sau phương thức method_a và tis đang chạy trước khi tiến trình con hoàn thành quá trình.
Làm thế nào tôi có thể ẩn stdout ở tất cả (và không muốn nó ở bất cứ nơi nào), và làm cho các mã khác chờ đợi cho các subprocess để hoàn thành việc thực hiện?
Quan sát: Hộp công cụ somtoolbox là một chương trình java, cung cấp đầu ra dài cho thiết bị đầu cuối. Đã thử:
outputTuple = subprocess.Popen(shlex.split(command_line), stdout = subprocess.PIPE).communicate()
nhưng liên tục quay lại đầu ra cho vỏ. Trợ giúp!
Nó không ẩn –
@Gabriel Có lẽ bạn cần phải chuyển hướng stderr quá? –
Đã hoạt động! Cảm ơn bạn rất nhiều! –