我正在编写一个具有服务器客户端类型框架的应用程序。为了实现逻辑,
- 我需要将压缩文件夹传输到 Windows 服务器,
- 解压文件夹并
- 然后运行文件夹内的某个 python 文件。
我正在尝试手动重新创建这些步骤,以便我可以使用 python 库(例如paramiko
和zipfile
或其他 python 库)重做它
到目前为止,我已经尝试了以下测试来检查是否可以使用 ssh 可靠地运行 python 脚本:
在 Windows 10 中使用 OpenSSH: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH 经过一些配置后,我能够使用 将文件从客户端复制到服务器
scp
。下一个计划是使用 ssh 远程运行特定文件,使用python filename.py
然后进入文件夹并尝试运行 python filename.py。但是,没有输出
python
。接下来我尝试了 MobaSSH,问题与使用微软的 OpenSSH 测试时一样。`Fatal Python error: Py_Initialize: can't initialize sys standard streams LookupError: unknown encoding: cp28591
当前线程 0x00000874(最近调用优先):`
从以上两个实验来看,我最初以为是我的 Python 安装有问题。所以我直接登录到机器,并用来
cmd
运行与 相同的文件,python filename.py
它确实运行并产生了预期的输出。所以 Python 在 Windows 机器上运行良好我的下一个假设是,如果通过 SSH 运行,则无法运行 Python。为了测试这一点,我登录了我的 ubuntu VM,并进行了相同的实验。在这种情况下,Python 运行良好,没有错误。
从这些实验来看,如果我使用 登录 Windows ssh
,并尝试运行 Python,则可能无法运行它,这可能是因为 Python 或 Windows 的怪癖。但如果我直接登录 Windows,我可以正常运行相同的 Python 脚本。此外,似乎 ssh 在 Linux 环境中确实可以完美运行。
由于其他一些考虑,我确实需要在 Windows 环境中运行 Python 脚本,而不是 Linux 环境。因此,尽管在 ubuntu VM 中运行测试文件没有问题,但我无法使用该环境。
有没有办法在 Windows 环境中通过 SSH 登录时运行 Python 脚本?
答案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 命令放入登录后运行的批处理文件中。
要找出所需的值,您可以在目标机器或另一台足够相似的 Windows 机器上启动一个本地 cmd shell 并运行:
chcp
set
要将所有变量直接写入从本地 cmd shell 在目标机器上运行的文件:
set >> myvars.cmd
必须手动编辑它,在每行前面添加一个“set”,以创建一个可以在远程登录后运行的脚本。
甚至可以在一行或 bash 脚本中登录、启动 ssh 并执行脚本:
#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'
cmd 的 /K 开关将运行以下命令(运行后不退出)。