summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2019-02-21 20:08:31 -0500
committerKevin Van Brunt <kmvanbrunt@gmail.com>2019-02-21 20:08:31 -0500
commitfa5e64d675ad390d1e5511a2ee698f177637b376 (patch)
treeef515434f813212081893aea0866e6f1f5ad3ee3
parent086d4db5e10b9bfe64c767a2dad9c38fe95f299c (diff)
downloadcmd2-git-fa5e64d675ad390d1e5511a2ee698f177637b376.tar.gz
Removed os.system in favor of do_shell
-rw-r--r--cmd2/cmd2.py11
-rw-r--r--tests/test_cmd2.py36
2 files changed, 22 insertions, 25 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py
index 65435d6b..d6da8b2b 100644
--- a/cmd2/cmd2.py
+++ b/cmd2/cmd2.py
@@ -3248,7 +3248,7 @@ class Cmd(cmd.Cmd):
for command in history:
fobj.write('{}\n'.format(command))
try:
- os.system('"{}" "{}"'.format(self.editor, fname))
+ self.do_edit(fname)
self.do_load(fname)
except Exception:
raise
@@ -3356,12 +3356,11 @@ class Cmd(cmd.Cmd):
if not self.editor:
raise EnvironmentError("Please use 'set editor' to specify your text editing program of choice.")
- editor = utils.quote_string_if_needed(self.editor)
+ command = utils.quote_string_if_needed(self.editor)
if args.file_path:
- expanded_path = utils.quote_string_if_needed(os.path.expanduser(args.file_path))
- os.system('{} {}'.format(editor, expanded_path))
- else:
- os.system('{}'.format(editor))
+ command += " " + utils.quote_string_if_needed(args.file_path)
+
+ self.do_shell(command)
@property
def _current_script_dir(self) -> Optional[str]:
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index 09c4fa6c..8b6035bd 100644
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -459,15 +459,15 @@ def test_history_edit(base_app, monkeypatch):
# going to call it due to the mock
base_app.editor = 'fooedit'
- # Mock out the os.system call so we don't actually open an editor
- m = mock.MagicMock(name='system')
- monkeypatch.setattr("os.system", m)
+ # Mock out the subprocess.Popen call so we don't actually open an editor
+ m = mock.MagicMock(name='Popen')
+ monkeypatch.setattr("subprocess.Popen", m)
# Run help command just so we have a command in history
run_cmd(base_app, 'help')
run_cmd(base_app, 'history -e 1')
- # We have an editor, so should expect a system call
+ # We have an editor, so should expect a Popen call
m.assert_called_once()
def test_history_run_all_commands(base_app):
@@ -883,46 +883,44 @@ def test_edit_file(base_app, request, monkeypatch):
base_app.editor = 'fooedit'
# Mock out the os.system call so we don't actually open an editor
- m = mock.MagicMock(name='system')
- monkeypatch.setattr("os.system", m)
+ m = mock.MagicMock(name='Popen')
+ monkeypatch.setattr("subprocess.Popen", m)
test_dir = os.path.dirname(request.module.__file__)
filename = os.path.join(test_dir, 'script.txt')
run_cmd(base_app, 'edit {}'.format(filename))
- # We think we have an editor, so should expect a system call
- m.assert_called_once_with('{} {}'.format(utils.quote_string_if_needed(base_app.editor),
- utils.quote_string_if_needed(filename)))
+ # We think we have an editor, so should expect a Popen call
+ m.assert_called_once()
def test_edit_file_with_spaces(base_app, request, monkeypatch):
# Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock
base_app.editor = 'fooedit'
- # Mock out the os.system call so we don't actually open an editor
- m = mock.MagicMock(name='system')
- monkeypatch.setattr("os.system", m)
+ # Mock out the subprocess.Popen call so we don't actually open an editor
+ m = mock.MagicMock(name='Popen')
+ monkeypatch.setattr("subprocess.Popen", m)
test_dir = os.path.dirname(request.module.__file__)
filename = os.path.join(test_dir, 'my commands.txt')
run_cmd(base_app, 'edit "{}"'.format(filename))
- # We think we have an editor, so should expect a system call
- m.assert_called_once_with('{} {}'.format(utils.quote_string_if_needed(base_app.editor),
- utils.quote_string_if_needed(filename)))
+ # We think we have an editor, so should expect a Popen call
+ m.assert_called_once()
def test_edit_blank(base_app, monkeypatch):
# Set a fake editor just to make sure we have one. We aren't really going to call it due to the mock
base_app.editor = 'fooedit'
- # Mock out the os.system call so we don't actually open an editor
- m = mock.MagicMock(name='system')
- monkeypatch.setattr("os.system", m)
+ # Mock out the subprocess.Popen call so we don't actually open an editor
+ m = mock.MagicMock(name='Popen')
+ monkeypatch.setattr("subprocess.Popen", m)
run_cmd(base_app, 'edit')
- # We have an editor, so should expect a system call
+ # We have an editor, so should expect a Popen call
m.assert_called_once()