Vấn đề tôi gặp phải là với Eclipse/PyCharm giải thích kết quả của Popen() khác với một terminal chuẩn. Tất cả đang sử dụng python2.6.1 trên OSX.subprocess.Popen() có hành vi không nhất quán giữa Eclipse/PyCharm và thực thi terminal
Dưới đây là một ví dụ kịch bản đơn giản:
import subprocess
args = ["/usr/bin/which", "git"]
print "Will execute %s" % " ".join(args)
try:
p = subprocess.Popen(["/usr/bin/which", "git"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# tuple of StdOut, StdErr is the responses, so ..
ret = p.communicate()
if ret[0] == '' and ret[1] <> '':
msg = "cmd %s failed: %s" % (fullcmd, ret[1])
if fail_on_error:
raise NameError(msg)
except OSError, e:
print >>sys.stderr, "Execution failed:", e
Với một thiết bị đầu cuối tiêu chuẩn, dòng:
ret = p.communicate()
mang lại cho tôi:
(Pdb) print ret
('/usr/local/bin/git\n', '')
Eclipse và PyCharm cho tôi một tuple trống :
ret = {tuple} ('','')
Thay đổi giá trị shell = cũng không giải quyết được sự cố. Trên terminal, thiết lập shell = True và truyền lệnh hoàn toàn (ví dụ, args = ["/ usr/bin/git"]) cho tôi kết quả tương tự: ret = ('/ usr/local/bin/git \ n ',' '). Và Eclipse/PyCharm đều cho tôi một tuple rỗng.
Bất kỳ ý tưởng nào về những gì tôi có thể làm sai?
Ồ, tôi vừa gặp sự cố tương tự trong Windows và bạn đã chỉ cho tôi đúng hướng! Cảm ơn. Một trình thông dịch được khởi chạy từ giao diện điều khiển có quyền truy cập vào cả hai biến "hệ thống" và "người dùng hiện tại" $ PATH, trong khi trình thông dịch hoặc chương trình được khởi chạy từ IDE hoặc Explorer chỉ có quyền truy cập vào "hệ thống" $ PATH. –
Giải pháp để làm cho Eclipse bao gồm tất cả các ngữ cảnh có sẵn từ thiết bị đầu cuối là gì? Cảm ơn! – Tarelli