微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 AHK 中嵌入 Python我有来自 AHK 网站的代码,我不能将多个 Python 脚本放在一个 Autohotkey 脚本中吗?

如何解决在 AHK 中嵌入 Python我有来自 AHK 网站的代码,我不能将多个 Python 脚本放在一个 Autohotkey 脚本中吗?

在AHK中嵌入Python(我有AHK网站的代码),我不能将多个python脚本放在一个Autohotkey脚本中吗?

https://www.autohotkey.com/boards/viewtopic.php?t=7732

Python 代码是用括号嵌入的,它运行良好。喜欢,

py =
(
some code
some code
)
Runpython(py) : works fine

Runpython()
{
some code
some code
}

是的,上面的代码工作正常。但我遇到的问题是, 如果我有多个像下面这样的 python 代码,似乎无论如何都只返回第一个 python 脚本。

py1 =
(
some code
some code
)

py2 =
(
some code
some code
)

Runpython(py1) ; returns py1 which is fine 

Runpython(py2) ; still returns py1,which is the trouble I got.

Runpython()
{
some code
some code
}

是的,就像上面一样。希望我可以同时运行 py2 和 py1。

解决方法

如果你点击上面的链接,下面有一个脚本是由名为 XeroByte 的用户完成的。 我把它以简短的形式放在这里,只包含关键部分。

我想运行多个 python 脚本。但是每次我尝试运行第二个脚本时,总是运行第一个脚本。 我决定取出每一行,直到它起作用为止。

pyStr= ;python code
(
Some code works
Some code works 
)

pyStr2= ;python code that I added
(
Some code don't work
Some code don't work
)

RunPython(pyStr:="",PyVer:="")

    finalPyStr := (pyStr="") ? Selection() : pyStr ; if a string has been passed into this function then use that as the python code,otherwise use the currently selected text using my custom Selection() function
    if(StrLen(finalPyStr) > 0){ ; Only do the following if there is some python code to run
        DllCall("LoadLibrary","Str",PythonDll)
        DllCall(PythonDll "\Py_Initialize","Cdecl")
        DllCall(PythonDll "\PyRun_SimpleString","AStr",finalPyStr)
        DllCall(PythonDll "\Py_Finalize","Cdecl")
    }
    return 1
}

最后,我了解到 DllCall(PythonDll "\Py_Finalize","Cdecl") 是主要问题。我不知道它的确切用途,但它确实阻止了我的第二个脚本的运行。所以最终的形式如下。

pyStr= ;python code
(
Some code works
Some code works 
)

pyStr2= ;python code that I added
(
Some code works
Some code works
)

RunPython(pyStr:="",finalPyStr)
    }
    return 1
}

我的第二个代码也和第一个一样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。