NẾU nó được sử dụng nhiều trong mã bạn muốn chạy nhưng mã đó không phải được duy trì lâu dài (hoặc bạn cần sửa chữa nhanh chóng bất kể các vấn đề về bảo trì tiềm ẩn trong tương lai) thì bạn có thể bỏ qua (hay còn gọi là bản vá khỉ) nó ở bất cứ nơi nào quy trình con được nhập ...
Chỉ cần nâng mã từ 2.7 và chèn nó như vậy ...
import subprocess
if "check_output" not in dir( subprocess ):
def f(*popenargs, **kwargs):
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be overridden.')
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise subprocess.CalledProcessError(retcode, cmd)
return output
subprocess.check_output = f
Có thể phải bồn chồn nhẹ.
Hãy ghi nhớ mặc dù bạn vẫn phải duy trì những backport nhỏ bẩn như thế này. Nếu lỗi được phát hiện và sửa trong bản python mới nhất thì bạn a) phải lưu ý điều đó và b) cập nhật phiên bản của mình nếu bạn muốn giữ an toàn. Ngoài ra, việc ghi đè & tự xác định các chức năng bên trong là cơn ác mộng tồi tệ nhất của anh chàng tiếp theo, đặc biệt là khi anh chàng tiếp theo là BẠN vài năm sau và bạn đã quên tất cả về các vụ hack thú vị mà bạn đã làm lần trước! Tóm lại: hiếm khi là một ý tưởng hay.
CalledProcessErrorkhi quá trình trả về mã trả về khác 0.