0
0 комментариев

Портирую задачи, написанные с помощью invoke (v 0.21), c *nix на Windows.
Любое использование ctx.run приводит к исключению.

tasks.py:

from invoke import task
 
@task
def hello(ctx):
    ctx.run('echo Hello')

Результат одинаковый как в Git bash, так и в cmd.exe:

C:\...>invoke hello
 
Traceback (most recent call last):
  File "c:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python36\Scripts\invoke.exe\__main__.py", line 9, in <module>
  File "c:\python36\lib\site-packages\invoke\program.py", line 293, in run
    self.execute()
  File "c:\python36\lib\site-packages\invoke\program.py", line 414, in execute
    executor.execute(*self.tasks)
  File "c:\python36\lib\site-packages\invoke\executor.py", line 129, in execute
    result = call.task(*args, **call.kwargs)
  File "c:\python36\lib\site-packages\invoke\tasks.py", line 115, in __call__
    result = self.body(*args, **kwargs)
  File "C:\...\tasks.py", line 5, in hello
    ctx.run('echo Hello')
  File "c:\python36\lib\site-packages\invoke\context.py", line 82, in run
    return self._run(runner, command, **kwargs)
  File "c:\python36\lib\site-packages\invoke\context.py", line 89, in _run
    return runner.run(command, **kwargs)
  File "c:\python36\lib\site-packages\invoke\runners.py", line 262, in run
    return self._run_body(command, **kwargs)
  File "c:\python36\lib\site-packages\invoke\runners.py", line 276, in _run_body
    self.start(command, shell, env)
  File "c:\python36\lib\site-packages\invoke\runners.py", line 981, in start
    stdin=PIPE,
  File "c:\python36\lib\subprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "c:\python36\lib\subprocess.py", line 992, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 3] The system cannot find the path specified

Хотя вот так ошибок нет:

C:\...>echo Hello
Hello

Вот что в переменной %PATH%:

C:\Python36\Scripts\;C:\Python36\;C:\Python27\;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Code Collaborator Client;C:\Program Files (x86)\CollabNet Subversion;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\ProgramData\chocolatey\bin;

А если запускаю cmd через Git bash, то так:

C:\Users\nvolynkin\bin;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\local\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\nvolynkin\bin;C:\Python36\Scripts;C:\Python36;C:\Python27;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Code Collaborator Client;C:\Program Files (x86)\CollabNet Subversion;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\ProgramData\chocolatey\bin;C:\Program Files\Git\usr\bin\vendor_perl;C:\Program Files\Git\usr\bin\core_perl

Я проверил все пути в обеих версиях %PATH%. Пары директорий не было, я их создал, но проблема осталась.

Куда копать дальше?


Заодно было бы интеренсо узнать, что за терминал используется в вызовах ctx.run? Похоже, что это cmd.exe, но не тот же, который я запускаю по Win+R > cmd или открывая cmd.exe из Git bash.


Добавить комментарий