繁体   English   中英

即使使用 ssh.exe 的完整路径,Python 也无法使用 subprocess.run 在 Windows 中找到 ssh 二进制文件

[英]Python can't find ssh binaries in Windows using subprocess.run, even with full path to ssh.exe

当我在 powershell 中运行scp.exe时,它显示了用法。 但是 python 告诉该文件不存在使用os.path.isfile("C:\\\\Windows\\\\System32\\\\OpenSSH\\\\scp.exe") 我之前通过subprocess.run调用 scp 的所有脚本都在工作。 现在它的结果是:

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 存在性测试

我发现了导致问题的原因。 它是 Python 的架构版本。

我的 Windows 是 64 位的。 我已经下载了 32 位和 64 位的嵌入式版本。 64位版本找到scp.exe可执行文件如下图:

  • MSC v.1916 32 位(英特尔):
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")
>>>
  • MSC 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'
>>> 

结果打印

我之前安装的 Python 是 64 位的。 对 Visual Studio Code 中未安装解释器的消息感到困扰,我单击了链接并重新安装了解释器,但该链接指向了 32 位版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM