Commit a581ff62 by Thomas Lee Committed by Sébastien Eustace

Use `os.execvp` for `poetry run` (#1236)

* Use os.execvp for poetry run

* Use subprocess.Popen for Windows

* Handle env kwargs
parent 183258c1
...@@ -40,15 +40,13 @@ class RunCommand(EnvCommand): ...@@ -40,15 +40,13 @@ class RunCommand(EnvCommand):
cmd = ["python", "-c"] cmd = ["python", "-c"]
cmd += [ cmd += [
'"import sys; ' "import sys; "
"from importlib import import_module; " "from importlib import import_module; "
"sys.argv = {!r}; {}" "sys.argv = {!r}; {}"
"import_module('{}').{}()\"".format( "import_module('{}').{}()".format(args, src_in_sys_path, module, callable_)
args, src_in_sys_path, module, callable_
)
] ]
return self.env.run(*cmd, shell=True, call=True) return self.env.execute(*cmd)
@property @property
def _module(self): def _module(self):
......
...@@ -712,7 +712,16 @@ class Env(object): ...@@ -712,7 +712,16 @@ class Env(object):
def execute(self, bin, *args, **kwargs): def execute(self, bin, *args, **kwargs):
bin = self._bin(bin) bin = self._bin(bin)
return subprocess.call([bin] + list(args), **kwargs) if not self._is_windows:
args = [bin] + list(args)
if "env" in kwargs:
return os.execvpe(bin, args, kwargs["env"])
else:
return os.execvp(bin, args)
else:
exe = subprocess.Popen([bin] + list(args), **kwargs)
exe.communicate()
return exe.returncode
def is_venv(self): # type: () -> bool def is_venv(self): # type: () -> bool
raise NotImplementedError() raise NotImplementedError()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment