From 80c98c6b8d4ac15193d9722264a4ce1caf8cb79e Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 7 May 2013 19:04:01 -0400
Subject: [PATCH] Fix create_some_context if not sys.stdin.isatty().

---
 pyopencl/__init__.py | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index 6635680a..633b59c4 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -669,33 +669,38 @@ def create_some_context(interactive=True, answers=None):
         answers = ctx_spec.split(":")
 
     if answers is not None:
-        pre_provided_answers = answers[:]
+        pre_provided_answers = answers
+        answers = answers[:]
     else:
         pre_provided_answers = None
 
     user_inputs = []
 
+    try:
+        import sys
+        if not sys.stdin.isatty():
+            interactive = False
+    except:
+        interactive = False
+
     def get_input(prompt):
         if answers:
             return str(answers.pop(0))
+        elif not interactive:
+            return ''
         else:
             user_input = raw_input(prompt)
             user_inputs.append(user_input)
             return user_input
 
-    try:
-        import sys
-        if not sys.stdin.isatty():
-            interactive = False
-    except:
-        interactive = False
+    # {{{ pick a platform
 
     platforms = get_platforms()
 
     if not platforms:
         raise Error("no platforms found")
-    elif len(platforms) == 1 or not interactive:
-        platform = platforms[0]
+    elif len(platforms) == 1:
+        platform, = platforms
     else:
         if not answers:
             print "Choose platform:"
@@ -723,6 +728,10 @@ def create_some_context(interactive=True, answers=None):
                 if platform is None:
                     raise RuntimeError("input did not match any platform")
 
+    # }}}
+
+    # {{{ pick a device
+
     devices = platform.get_devices()
 
     def parse_device(choice):
@@ -742,7 +751,7 @@ def create_some_context(interactive=True, answers=None):
 
     if not devices:
         raise Error("no devices found")
-    elif len(devices) == 1 or not interactive:
+    elif len(devices) == 1:
         pass
     else:
         if not answers:
@@ -756,6 +765,8 @@ def create_some_context(interactive=True, answers=None):
         else:
             devices = [parse_device(i) for i in answer.split(",")]
 
+    # }}}
+
     if user_inputs:
         if pre_provided_answers is not None:
             user_inputs = pre_provided_answers + user_inputs
-- 
GitLab