mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import subprocess
|
|
|
|
from devtoolslib.shell import Shell
|
|
from devtoolslib import http_server
|
|
|
|
|
|
class LinuxShell(Shell):
|
|
"""Wrapper around Mojo shell running on Linux.
|
|
|
|
Args:
|
|
executable_path: path to the shell binary
|
|
command_prefix: optional list of arguments to prepend to the shell command,
|
|
allowing e.g. to run the shell under debugger.
|
|
"""
|
|
|
|
def __init__(self, executable_path, command_prefix=None):
|
|
self.executable_path = executable_path
|
|
self.command_prefix = command_prefix if command_prefix else []
|
|
|
|
def ServeLocalDirectory(self, local_dir_path, port=0,
|
|
additional_mappings=None):
|
|
"""Serves the content of the local (host) directory, making it available to
|
|
the shell under the url returned by the function.
|
|
|
|
The server will run on a separate thread until the program terminates. The
|
|
call returns immediately.
|
|
|
|
Args:
|
|
local_dir_path: path to the directory to be served
|
|
port: port at which the server will be available to the shell
|
|
additional_mappings: List of tuples (prefix, local_base_path) mapping
|
|
URLs that start with |prefix| to local directory at |local_base_path|.
|
|
The prefixes should skip the leading slash.
|
|
|
|
Returns:
|
|
The url that the shell can use to access the content of |local_dir_path|.
|
|
"""
|
|
return 'http://%s:%d/' % http_server.StartHttpServer(local_dir_path, port,
|
|
additional_mappings)
|
|
|
|
def ForwardHostPortToShell(self, host_port):
|
|
"""Forwards a port on the host machine to the same port wherever the shell
|
|
is running.
|
|
|
|
This is a no-op if the shell is running locally.
|
|
"""
|
|
pass
|
|
|
|
def Run(self, arguments):
|
|
"""Runs the shell with given arguments until shell exits, passing the stdout
|
|
mingled with stderr produced by the shell onto the stdout.
|
|
|
|
Returns:
|
|
Exit code retured by the shell or None if the exit code cannot be
|
|
retrieved.
|
|
"""
|
|
command = self.command_prefix + [self.executable_path] + arguments
|
|
return subprocess.call(command, stderr=subprocess.STDOUT)
|
|
|
|
def RunAndGetOutput(self, arguments):
|
|
"""Runs the shell with given arguments until shell exits.
|
|
|
|
Args:
|
|
arguments: list of arguments for the shell
|
|
|
|
Returns:
|
|
A tuple of (return_code, output). |return_code| is the exit code returned
|
|
by the shell or None if the exit code cannot be retrieved. |output| is the
|
|
stdout mingled with the stderr produced by the shell.
|
|
"""
|
|
command = self.command_prefix + [self.executable_path] + arguments
|
|
p = subprocess.Popen(command, stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT)
|
|
(output, _) = p.communicate()
|
|
return p.returncode, output
|