【问题标题】:Ansicon doesn't install from python but only from cmdAnsicon 不是从 python 安装,而是从 cmd 安装
【发布时间】:2015-02-22 20:50:56
【问题描述】:

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

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

【问题讨论】:

    标签: python windows cmd ansicon


    【解决方案1】:

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

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

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

    subprocess 模块(与os.system 不同)将直接执行命令,中间没有shell(除非您传递shell=True)。然后 Python 将生成 ansiconansicon 将根据需要注入 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))
    

    【讨论】:

      猜你喜欢
      • 2023-02-07
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2016-10-15
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多