Python subprocess.run: cấp cho một tiến trình con môi trường proxy riêng
Truyền một môi trường đã sao chép cho subprocess.run khi một lệnh con cần proxy mà không thay đổi môi trường của Python cho việc khác.
Một chương trình Python có thể cấp cho một lệnh con môi trường proxy riêng. Sao chép các giá trị được kế thừa, sửa bản sao rồi truyền nó cho subprocess.run:
import os
import subprocess
child_env = os.environ.copy()
child_env["https_proxy"] = "http://proxy.example:8080"
subprocess.run(
["curl", "--head", "https://www.example.com/"],
env=child_env,
check=True,
timeout=30,
)Ví dụ giả định curl đã có sẵn. Yêu cầu HTTPS của nó có thể dùng một proxy HTTP hỗ trợ đường hầm cần thiết. Với lần kiểm tra trang công khai này mà không cấu hình thông tin xác thực proxy, một ứng viên từ danh sách proxy HTTP có thể thay thế điểm cuối trong ví dụ. Tiến trình con vẫn nhận phần còn lại của môi trường đã sao chép, kể cả mọi thiết lập bỏ qua áp dụng được.
Truyền env cho lời gọi này môi trường đó. Bản sao tránh việc thay đổi os.environ cho việc khác trong tiến trình Python.
Gán trực tiếp vào os.environ cũng có ý nghĩa: nó cập nhật môi trường tiến trình của Python và có thể ảnh hưởng đến các tiến trình con khởi chạy sau đó. Nó không cập nhật shell đã khởi chạy Python, không cập nhật ứng dụng không liên quan, cũng không cập nhật tiến trình con đang chạy.
Nếu mục đích là thay đổi các lệnh trong tương lai trong shell tương tác của bạn, hãy thực hiện thay đổi đó trong shell. Nếu chỉ một công cụ đã khởi chạy cần tuyến khác, hãy giữ môi trường của nó bên cạnh lời gọi subprocess như được trình bày.