pass pathlib.Path objects through on Python 3.7+
subprocess cwd= parameter supports path-like objects on all platforms
from 3.7 onwards
Markus Gerstel
2 years ago
495 | 495 |
command = tuple(_path_resolve(part) for part in command)
|
496 | 496 |
if win32resolve and sys.platform == "win32":
|
497 | 497 |
command = _windows_resolve(command)
|
|
498 |
if working_directory and sys.version_info < (3, 7):
|
|
499 |
working_directory = os.fspath(working_directory)
|
498 | 500 |
|
499 | 501 |
p = subprocess.Popen(
|
500 | 502 |
command,
|
501 | 503 |
shell=False,
|
502 | |
cwd=_path_resolve(working_directory),
|
|
504 |
cwd=working_directory,
|
503 | 505 |
env=env,
|
504 | 506 |
stdin=stdin_pipe,
|
505 | 507 |
stdout=subprocess.PIPE,
|
0 | 0 |
import copy
|
1 | 1 |
import mock
|
2 | 2 |
import os
|
|
3 |
import pathlib
|
3 | 4 |
import procrunner
|
4 | 5 |
import pytest
|
5 | 6 |
import sys
|
|
86 | 87 |
False,
|
87 | 88 |
callback_stdout=mock.sentinel.callback_stdout,
|
88 | 89 |
callback_stderr=mock.sentinel.callback_stderr,
|
89 | |
working_directory=mock.sentinel.cwd,
|
|
90 |
working_directory=pathlib.Path("somecwd"),
|
90 | 91 |
raise_timeout_exception=True,
|
91 | 92 |
)
|
92 | 93 |
|
93 | 94 |
assert mock_subprocess.Popen.called
|
94 | 95 |
assert mock_subprocess.Popen.call_args[1]["env"] == os.environ
|
95 | |
assert mock_subprocess.Popen.call_args[1]["cwd"] == mock.sentinel.cwd
|
|
96 |
assert mock_subprocess.Popen.call_args[1]["cwd"] in (
|
|
97 |
pathlib.Path("somecwd"),
|
|
98 |
"somecwd",
|
|
99 |
)
|
96 | 100 |
mock_streamreader.assert_has_calls(
|
97 | 101 |
[
|
98 | 102 |
mock.call(
|