
Я пишу приложение с серверно-клиентским типом фреймворка. Для реализации логики,
- Мне нужно перенести заархивированную папку на сервер Windows,
- распакуйте папку и
- затем запустите определенный файл Python в папке.
Я пытаюсь воссоздать шаги вручную, чтобы затем можно было повторить их с помощью библиотек Python (таких как paramiko
и zipfile
или других библиотек Python)
До сих пор я пробовал следующие тесты, чтобы проверить, смогу ли я надежно запустить скрипт Python с помощью ssh:
Использование OpenSSH из Windows 10: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH После некоторой настройки я смог копировать файлы с клиентской стороны на сервер с помощью
scp
. Следующий план состоял в том, чтобы использовать ssh для удаленного запуска определенного файла с помощьюpython filename.py
Затем cd' в папку и попытался запустить python filename.py. Однако вывода от
python
.Затем я попробовал MobaSSH, и проблема была такой же, как и при тесте с OpenSSH от Microsoft. `Fatal Python error: Py_Initialize: can't initialize sys standard streams LookupError: unknown encoding: cp28591
Текущий поток 0x00000874 (сначала самый последний вызов):`
Из двух экспериментов выше я сначала подумал, что проблема в моей установке python. Поэтому я напрямую вошел в машину и использовал
cmd
для запуска того же файла, что и ,python filename.py
он запускается и выдает ожидаемые результаты. Так что python отлично работает на машине WindowsМоя следующая гипотеза заключалась в том, что невозможно запустить python, если он запущен через SSH. Чтобы проверить это, я вошел в свою виртуальную машину Ubuntu и провел тот же эксперимент. В этом случае python запустился нормально, без ошибок.
Из этих экспериментов следует, что если я войду в Windows с помощью ssh
и попытаюсь запустить python, я не смогу его запустить, возможно, из-за причуды python или Windows. Но если я напрямую войду в Windows, я смогу нормально запустить тот же скрипт python. Кроме того, похоже, что ssh работает безупречно в среде Linux.
Мне нужно запустить скрипт python в среде Windows, а не в среде linux из-за некоторых других соображений. Поэтому, хотя запуск тестового файла отлично работал в виртуальной машине ubuntu, я не могу использовать эту среду. .
Есть ли способ запустить скрипт Python при входе через SSH в среде Windows?
решение1
Мне удалось добиться определенного успеха в следующих случаях:
1.После входа в систему запустите cmd.exe
cmd
2.Установите кодовую страницу, например 850 (из cmd.exe)
chcp 850
3. Установите PATH и другие переменные среды (из cmd.exe)
set PATH=c:\Python27;c:\Python27\Scripts;C:\Program Files (x86)\...
set OTHER_VAR=...
Вы можете поместить команды chcp и set в пакетный файл, который запустите после входа в систему.
Чтобы узнать нужные значения, вы можете запустить локальную оболочку cmd на целевой машине или на другой машине Windows, которая достаточно похожа, и выполнить:
chcp
set
Чтобы записать все переменные непосредственно в файл, запустите на целевой машине из локальной оболочки cmd:
set >> myvars.cmd
Его необходимо отредактировать вручную, добавив к каждой строке префикс «set», чтобы создать скрипт, который затем можно будет запустить после удаленного входа в систему.
Можно даже войти в систему, запустить ssh и выполнить скрипт в одной строке или в скрипте bash:
#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'
Параметр /K команды cmd выполнит следующую команду (без выхода после ее выполнения).