2012-07-05 20 views
8

Tôi đang sử dụng Popen bởi vì tôi cần env, như thế này:subprocess.call env var

Popen(
    ["boto-rsync", "..."], 
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"}, 
    ) 

Vấn đề là Popen chạy lệnh như một chủ đề mới. Có cách nào để tôi có thể chuyển số env tới subprocess.call hoặc ngăn Popen tạo chuỗi mới không? Thanx

+1

liên quan: 'Popen()' KHÔNG tạo ra một chủ đề mới (nó tạo ra một * quy trình mới *). – jfs

Trả lời

17

Bạn có thể sử dụng env với cuộc gọi theo cách chính xác giống như với popen:

subprocess.call(
    ["boto-rsync", "..."], 
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"}, 
    ) 
+0

Thanx, tôi không biết tại sao tôi không thử! Tôi nghĩ rằng tôi không thể tìm thấy tùy chọn. – AliBZ

+3

@AliBZ tài liệu cho [subprocess.call] (https://docs.python.org/2/library/subprocess.html#subprocess.call) không rõ ràng về điểm đó - chỉ báo duy nhất mà từ khóa khác là được hỗ trợ là một dấu hoa thị nhỏ trong 'subprocess.call (args, *, stdin = None, stdout = None, stderr = None, shell = False)' –

+3

@AliBZ: phải rõ ràng: 'subprocess.call (cmd)' là chỉ 'subprocess.Popen (cmd) .wait()' tức là, bạn có thể chuyển tới 'call()' tất cả các đối số mà bạn có thể chuyển tới 'Popen()'. – jfs