Python не может найти s sh двоичные файлы в Windows, используя subprocess.run, даже с полным путем к s sh .exe - PullRequest
2 голосов
/ 14 февраля 2020

Когда я запускаю scp.exe в powershell, он показывает использование. Но python говорит, что файл не существует, тестируя с os.path.isfile("C:\\Windows\\System32\\OpenSSH\\scp.exe"). Все мои скрипты, которые вызывают scp через subprocess.run, работали раньше. Теперь это приводит к:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Alyson\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 489, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\Alyson\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Alyson\AppData\Local\Programs\Python\Python38-32\lib\subprocess.py", line 1307, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] O sistema não pode encontrar o arquivo especificado

Единственное, что я недавно сделал, - это установил Windows обновление (KB4537759, KB4532693) и обновил Python с 3,7 до 3,8. Я даже пытался передать shell=true на subprocess.run.

scp-тесты на существование

1 Ответ

0 голосов
/ 14 февраля 2020

Я обнаружил, что вызвало проблему. Это версия архитектуры Python.

My Windows является 64-разрядной. Я скачал встроенную версию как 32-битной, так и 64-битной версии. 64-разрядная версия обнаружила исполняемый файл scp.exe, как показано ниже:

  • MS C v.1916 32 бит (Intel):
PS C:\Users\Alyson\Documents\0\Xpriment\python32> .\python                                    Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
>>> import shutil; shutil.which("scp")
>>>
  • MS C v.1916 64 бит (AMD64):
PS C:\Users\Alyson\Documents\0\Xpriment\python64> .\python                                            Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
>>> import shutil; shutil.which("scp")
'C:\\Windows\\System32\\OpenSSH\\scp.EXE'
>>> 

print of results

Python, установленный ранее, был 64-битный. Надоело сообщение в Visual Studio Code о том, что интерпретатор не установлен, я щелкнул ссылку и переустановил интерпретатор, но ссылка указывала на 32-разрядную версию.

...