From 38777f9b2662fb2b24c58345c440d80ae4e5f810 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Wed, 18 Jan 2017 00:12:41 +0000 Subject: [PATCH] [LIT] Make util.executeCommand python3 friendly Summary: The parameter `input` to `subprocess.Popen.communicate(...)` must be an object of type `bytes` . This is strictly enforced in python3. This patch (1) allows `to_bytes` to be safely called redundantly. (2) Explicitly convert `input` within `executeCommand`. This allows for usages like `executeCommand(['clang++', '-'], input='int main() {}\n')`. Reviewers: ddunbar, BinaryKhaos, modocache, dim, EricWF Reviewed By: EricWF Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28736 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292308 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/lit/lit/util.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/utils/lit/lit/util.py b/utils/lit/lit/util.py index be37998c6f1..104e9dac464 100644 --- a/utils/lit/lit/util.py +++ b/utils/lit/lit/util.py @@ -10,6 +10,8 @@ import threading def to_bytes(str): # Encode to UTF-8 to get binary data. + if isinstance(str, bytes): + return str return str.encode('utf-8') def to_string(bytes): @@ -200,6 +202,8 @@ def executeCommand(command, cwd=None, env=None, input=None, timeout=0): If the timeout is hit an ``ExecuteCommandTimeoutException`` is raised. """ + if input is not None: + input = to_bytes(input) p = subprocess.Popen(command, cwd=cwd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, -- 2.40.0