私は最新の Windows 10 と Python 3.7 を実行しています。
cmd と PowerShell の両方で c:\Windows\System32\OpenSSH の内容を確認でき、ssh コマンドを通常どおり実行できます。
ただし、Python プロセスを開始すると、このファイルは表示されず、os.path.exists("c:\\Windows\\System32\\OpenSSH")
が返されますFalse
。その後、サブプロセスで cmd または Powershell のインスタンスを開始すると、そのディレクトリは表示されません。
私は、プロセス管理の一環として正しい環境で新しいシェルをインスタンス化する Python 依存関係管理ツールである Pipenv を使用しようとしています。
その結果、次のような動作が発生します。
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])