尝试 运行 来自 python 子进程的可执行文件,该子进程本身是从 ssh 调用的(在 Windows 中)

Trying to run an executable from a python subprocess that is itself called from ssh (in Windows)

我 运行宁 Windows 10 和 python 3.9.

我需要通过 ssh 进入 Windows 10 机器并调用一个 python 脚本,该脚本又应该通过 subprocess.Popen.

启动一个可执行文件

因为我需要运行特定conda环境的python我先创建一个.bat文件(称之为python.bat)如下:

echo off
CALL conda activate
F:\Development\Languages\Pyhton\miniconda3\python.exe %*

因此,当我使用参数调用此批处理文件时,它将首先激活基础 conda 环境,然后 运行 参数提供的 python 脚本。

然后我创建一个 python 脚本(称之为 test.py)如下:

import subprocess

t = subprocess.Popen([r'full path of executable'])

调用此脚本时,它将启动其中硬编码的可执行文件。

从 ssh shell(在同一台或不同的机器上)我这样做:

python.bat test.py

现在,如果我 运行 在普通命令 shell(不是 ssh)中使用完全相同的命令,那么一切正常,我看到我的可执行文件正确打开。我也在应用程序下的任务管理器中看到它,消耗了我预期的 10% CPU。

通过 ssh shell 虽然我可以看到可执行文件出现在任务管理器中,但是在后台进程下,消耗了我 CPU 的大约 0.1%,我看不到 window 它的。另外,因为我编写了可执行文件,它是为了通过 0mq 与另一个 运行ning 应用程序进行通信,所以我知道它实际上没有 运行ning 正确,因为我无法进行通信。

有趣的是,如果我尝试调用其他可执行文件(例如 Office 程序或 Web 浏览器),我会得到同样的奇怪行为,但如果我尝试调用 explorer.exe,那么一切正常即使通过 ssh shell.

任何关于为什么通过 ssh 调用批处理文件会对子进程产生任何影响的帮助将不胜感激。

回答我自己的问题。

答案在这里

Starting GUI programs via OpenSSH on Windows?

显然 OpenSSHServer 运行s 作为服务无法打开 GUI 应用程序(我不知道为什么它与 explorer.exe 一起工作)。

如果您使用另一台服务器,您可以在启动时以用户身份设置为 运行,那么一切正常。