![Windows 10 中的 Python 进程无法访问 OpenSSH 目录](https://linux22.com/image/1585652/Windows%2010%20%E4%B8%AD%E7%9A%84%20Python%20%E8%BF%9B%E7%A8%8B%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%20OpenSSH%20%E7%9B%AE%E5%BD%95.png)
我正在运行 Windows 10(完全更新)和 Python 3.7。
我可以通过cmd和PowerShell看到c:\Windows\System32\OpenSSH的内容,并且可以正常运行ssh命令。
但是,如果我启动 Python 进程,则此文件不可见,os.path.exists("c:\\Windows\\System32\\OpenSSH")
返回False
。如果我随后在子进程中启动 cmd 或 Powershell 实例,则该目录不可见。
我正在尝试使用 Pipenv,一种 Python 依赖项管理工具,它将在其进程管理中实例化一个具有正确环境的新 shell。
这会导致如下行为:
C:\Users\micro>dir c:\Windows\System32\OpenSSH\ssh.exe
Volume in drive C is OS
Volume Serial Number is AEDD-9508
Directory of c:\Windows\System32\OpenSSH
28/09/2017 15:49 851,456 ssh.exe
1 File(s) 851,456 bytes
0 Dir(s) 175,094,468,608 bytes free
C:\Users\micro>pipenv run dir c:\Windows\System32\OpenSSH\ssh.exe
The system cannot find the file specified.
C:\Users\micro>
我已与其他用户核实过,他们没有遇到这个问题。
我已确保所有更新都已应用于 Windows,并尝试删除并重新添加 OpenSSH 功能。
如果有人能提示哪些信息对于调试这个有用,我会非常乐意听到。
答案1
遇到了完全相同的问题,并且我在这个帖子中找到了解决方案: https://stackoverflow.com/questions/41630224/python-does-not-find-system32
Windows 实际上是在 SysWOW64 中查找;我修复此问题的代码是
system32 = os.path.join(os.environ['SystemRoot'], 'SysNative' if
platform.architecture()[0] == '32bit' else 'System32')
listtest_path = os.path.join(system32, 'openSSH', 'ssh-keygen.exe')
subprocess.call([listtest_path])