[util/cli] Add new CLI utilities
For now, this just allows executing commands
This commit is contained in:
parent
f9267f2131
commit
9d4936b596
2 changed files with 53 additions and 0 deletions
33
tests/util/test_cli.py
Normal file
33
tests/util/test_cli.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
import util.cli
|
||||||
|
|
||||||
|
class cli(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.nonExistentCommand = 'i-do-not-exist'
|
||||||
|
self.validCommand = 'echo test'
|
||||||
|
self.validCommandOutput = 'test\n'
|
||||||
|
self.utfCommand = 'echo ÖPmŧß'
|
||||||
|
self.utfCommandOutput = 'ÖPmŧß\n'
|
||||||
|
|
||||||
|
def test_valid_command(self):
|
||||||
|
rv = util.cli.execute(self.validCommand)
|
||||||
|
self.assertEqual(self.validCommandOutput, rv)
|
||||||
|
|
||||||
|
def test_utf_command(self):
|
||||||
|
rv = util.cli.execute(self.utfCommand)
|
||||||
|
self.assertEqual(self.utfCommandOutput, rv)
|
||||||
|
|
||||||
|
def test_invalid_command(self):
|
||||||
|
with self.assertRaises(RuntimeError):
|
||||||
|
util.cli.execute(self.nonExistentCommand)
|
||||||
|
|
||||||
|
def test_command_exit_code(self):
|
||||||
|
with self.assertRaises(RuntimeError):
|
||||||
|
util.cli.execute('cat {}'.format(self.nonExistentCommand))
|
||||||
|
|
||||||
|
def test_async(self):
|
||||||
|
rv = util.cli.execute(self.validCommand, wait=False)
|
||||||
|
self.assertEqual('', rv)
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
20
util/cli.py
Normal file
20
util/cli.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import logging
|
||||||
|
|
||||||
|
def execute(cmd, wait=True):
|
||||||
|
args = shlex.split(cmd)
|
||||||
|
logging.debug(cmd)
|
||||||
|
try:
|
||||||
|
proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
raise RuntimeError('{} not found'.format(cmd))
|
||||||
|
|
||||||
|
if wait:
|
||||||
|
out, _ = proc.communicate()
|
||||||
|
if proc.returncode != 0:
|
||||||
|
raise RuntimeError('{} exited with {}'.format(cmd, proc.returncode))
|
||||||
|
return out.decode('utf-8')
|
||||||
|
return ''
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Reference in a new issue