0

我有一个必须通过管道与之通信的进程。它在 Windows 10 上的 Windows XP SP3 兼容模式下正常工作,但在其他模式下不能正常工作。

但似乎子进程并不关心兼容模式,即使使用了 shell=True 。我认为如果 shell 启动它而不是根据请求直接进入内核,那么 CM 会被保留,但事实并非如此。从 cmd.exe 启动时,它按预期在 XP 兼容模式下工作。

如何强制子进程以兼容模式启动它?还是使用 shell=True 并添加了一些特殊的环境变量的问题?

该进程是 Cygwin 的 ssh.exe,它在 Windows 10 上打开关键权限存在很大问题。在 XP CM 中使用它会欺骗它忽略 ACL,否则会进入 posix 版本的权限模式。问题是我不能指望用户为他们通过属性添加的每个键设置正确的权限,并且在程序中自动执行此操作很复杂,因为程序可能没有权限这样做。这是一个大混乱。任何想法表示赞赏。

4

1 回答 1

1

__COMPAT_LAYER您可以在调用之前尝试设置ssh.exe

import os
import subprocess

os.environ.update({"__COMPAT_LAYER": "WinXP"})  # set it to WinXP

your_process = proc = subprocess.Popen(["ssh", "whatever"], shell=True, env=os.environ)
# ...
于 2017-06-10T14:33:38.387 回答