Python.exe 如何从字符串加载脚本?

在 AutoHotkey 习惯通过管道加载灵活生成的代码
AutoHotkey.exe \\.\pipe\test_9648000
但这在 python 上似乎失效了,管道虽然被读取,但会报错:
D:\python\python.exe: can’t open file ‘\\.\pipe\test_9770109’: [Errno 22] Invalid argument

目前想到的其他方案都不如管道方案:
1,写入到 .py文件
2,通过命令行加载。这显然也不行,上万行代码时显然是无法在命令行使用的
3,创建空进程后,通过exec() 在内部加载。

大佬们能否指点有没有其他方案?或者pipe管道为啥报错呢?

原来我是AHK通过json文件交换

现在apk直接跟API进行交换

有兴趣可以私聊

谢谢, 这并不是通信
而且论坛就是水贴的,没必要私聊。

动态加载代码,我现在也在用,现在是用提前写入到py的方案。

管道方案、exec等不会,能否介绍一下这几种方案的优劣

linux好像管道没有问题

image

如果你对几毫秒耗时无感,这些方法没什么大的优劣。
管道只是其中最快的而已。
写入 .py 涉及文件读写,延迟大
命令行只能加载简单代码
exec() 相当于初始化两次

我找到解决方法了,python.exe 不过是对 python.dll 的包装,我自己写个包装器就好了。

谢谢,能贴出调用方的代码吗?我怀疑是我调用代码没写好。

这个就是全部的代码了 :rofl:
如果你想两个程序在不同的终端调用,我只能给出bash的代码

执行端

mkfifo test_pipe_in_python
python < test_pipe_in_python

写入端

echo  "print('hello')" > test_pipe_in_python

谢谢,这和 Window 差异这么大,没有可参考性了

向大牛学习

其实 Windows 可以使用相同的方法,Windows 命令提示符和 Linux Shell 一样支持管道重定向:

具体语法如下:

echo 要执行的命令 | python

但是如果涉及特殊字符可能要做一下转义。

python -c "print('hello')"

官方文档里都写着的

哇擦,楼上挖的坟 :joy:

只能加载简单字符串,如果代码包含",怎样转义都无法加载,我试过

我也试过,能转义啊,当初还费了老鼻子劲一点点改的。

可以转义的,不过转义起来很恶心就是了 :joy:
PixPin_2024-07-18_19-55-32