1

我正在尝试在 Windows 8.1 上安装 ansicon。我提取了文件并达到了我需要调用的级别ansicon -i。当我在我的 cmd 中键入它并运行运行良好的 python 脚本但是当我从 python 调用 t 时os.system('ansicon -i'),它不起作用并且似乎它对 cmd 没有任何影响。

为什么os.system('ansicon -i')不起作用,我可以在 python 中使用什么替代方法?

4

1 回答 1

1

首先-i,真正起作用的不是旗帜。-i只告诉它自己添加到 AutoRun。暗示的-p标志-i是真正起作用的:-p告诉它将 DLL 注入父进程,这就是问题所在:当你使用时os.system,你生成一个 shell,然后运行你给它的命令。但是你让 Python 正在cmd运行ansicon,并且ansicon会注入到cmd中,然后cmd,完成它的工作后,将退出。

而不是使用os.system,使用subprocess模块,例如:

subprocess.check_call(['ansicon', '-p'])

subprocess模块(与 不同)将os.system直接执行命令,中间没有外壳(除非您通过shell=True)。然后 Python 将生成ansicon,并ansicon根据需要注入 Python。

也就是说,与其ansicon将自己注入到 Python 中,Python 可能只加载 DLL 本身,避免一些困难:

import sys
import math
import ctypes

bitness = 1 << round(math.log2(round(math.log2(sys.maxsize + 1))))
ctypes.WinDLL('ANSI{}.DLL'.format(bitness))
于 2014-12-24T20:54:59.483 回答