aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/livestreamer/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/livestreamer/cli.py')
-rw-r--r--src/livestreamer/cli.py30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/livestreamer/cli.py b/src/livestreamer/cli.py
index 9dc1098..ee38685 100644
--- a/src/livestreamer/cli.py
+++ b/src/livestreamer/cli.py
@@ -1,8 +1,8 @@
-#!/usr/bin/env python3
-
import sys, os, argparse, subprocess
import livestreamer
+
from livestreamer.compat import input, stdout, is_win32
+from livestreamer.logger import Logger
exampleusage = """
example usage:
@@ -15,6 +15,8 @@ Stream now playbacks in player (default is VLC).
"""
+logger = Logger("cli")
+msg_output = sys.stdout
parser = livestreamer.utils.ArgumentParser(description="CLI program that launches streams from various streaming services in a custom video player",
fromfile_prefix_chars="@",
formatter_class=argparse.RawDescriptionHelpFormatter,
@@ -24,7 +26,8 @@ parser.add_argument("url", help="URL to stream", nargs="?")
parser.add_argument("stream", help="Stream quality to play, use 'best' for highest quality available", nargs="?")
parser.add_argument("-h", "--help", action="store_true", help="Show this help message and exit")
-parser.add_argument("-l", "--plugins", action="store_true", help="Print all currently installed plugins")
+parser.add_argument("-u", "--plugins", action="store_true", help="Print all currently installed plugins")
+parser.add_argument("-l", "--loglevel", metavar="level", help="Set log level, valid levels: none, error, warning, info, debug", default="info")
playeropt = parser.add_argument_group("player options")
playeropt.add_argument("-p", "--player", metavar="player", help="Command-line for player, default is 'vlc'", default="vlc")
@@ -47,7 +50,11 @@ def exit(msg):
sys.exit(("error: {0}").format(msg))
def msg(msg):
- sys.stdout.write(msg + "\n")
+ msg_output.write(msg + "\n")
+
+def set_msg_output(output):
+ msg_output = output
+ logger.set_output(output)
def write_stream(fd, out, progress):
written = 0
@@ -60,6 +67,7 @@ def write_stream(fd, out, progress):
try:
out.write(data)
except IOError:
+ logger.error("Error when reading from stream")
break
written += len(data)
@@ -70,6 +78,7 @@ def write_stream(fd, out, progress):
if progress and written > 0:
sys.stderr.write("\n")
+ logger.info("Closing stream")
fd.close()
if out != stdout:
@@ -100,16 +109,21 @@ def output_stream(stream, args):
progress = False
out = None
+ logger.info("Opening stream {0}", args.stream)
+
try:
fd = stream.open()
except livestreamer.StreamError as err:
exit(("Could not open stream - {0}").format(err))
+ logger.debug("Pre-buffering 8192 bytes")
try:
prebuffer = fd.read(8192)
except IOError:
exit("Failed to read data from stream")
+ logger.debug("Checking output")
+
if args.output:
if args.output == "-":
out = stdout
@@ -128,6 +142,7 @@ def output_stream(stream, args):
pout = sys.stderr
perr = sys.stdout
+ logger.info("Starting player: {0}", args.player)
player = subprocess.Popen(cmd, shell=True, stdout=pout, stderr=perr,
stdin=subprocess.PIPE)
out = player.stdin
@@ -139,6 +154,7 @@ def output_stream(stream, args):
import msvcrt
msvcrt.setmode(out.fileno(), os.O_BINARY)
+ logger.debug("Writing stream to output")
out.write(prebuffer)
try:
@@ -152,6 +168,8 @@ def handle_url(args):
except livestreamer.NoPluginError:
exit(("No plugin can handle URL: {0}").format(args.url))
+ logger.info("Found matching plugin {0} for URL {1}", channel.module, args.url)
+
try:
streams = channel.get_streams()
except livestreamer.StreamError as err:
@@ -197,9 +215,13 @@ def main():
args = parser.parse_args(arglist)
+ if args.stdout or args.output == "-":
+ set_msg_output(sys.stderr)
+
livestreamer.options.set("errorlog", args.errorlog)
livestreamer.options.set("rtmpdump", args.rtmpdump)
livestreamer.options.set("jtvcookie", args.jtv_cookie)
+ logger.set_level(args.loglevel)
if args.url:
handle_url(args)