我运行的是Windows 10和python 3.9。
我需要ssh到Windows 10机器中,并调用一个python脚本,该脚本反过来应该通过子进程启动一个可执行文件。波本。
因为我需要运行特定conda环境的python,所以我首先创建了一个.bat文件(称为python.bat(,如下所示:
echo off
CALL conda activate
F:DevelopmentLanguagesPyhtonminiconda3python.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,虽然我可以看到可执行文件出现在任务管理器中,但在后台进程下,消耗了大约0.1%的CPU,我看不到它的窗口。此外,因为我编写了可执行文件,它旨在通过0mq与另一个正在运行的应用程序进行通信,我知道它实际上没有正常运行,因为我没有得到通信。
有趣的是,如果我试图调用其他可执行文件(例如Office程序或web浏览器(,我会得到同样奇怪的行为,但如果我尝试调用explorer.exe,那么即使通过ssh shell,一切都很好。
如果您能提供任何帮助,说明为什么通过ssh调用批处理文件会对子流程产生任何影响,我们将不胜感激。
回答我自己的问题。
这是的答案
在Windows上通过OpenSSH启动GUI程序?
显然,OpenSSHServer是作为一种服务运行的,它不能打开GUI应用程序(我不知道它为什么能与explorer.exe一起工作(
如果您使用另一台服务器,您可以将其设置为在启动时以用户身份运行,那么一切都很好。