crows
1
在 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管道为啥报错呢?
crows
3
谢谢, 这并不是通信
而且论坛就是水贴的,没必要私聊。
动态加载代码,我现在也在用,现在是用提前写入到py的方案。
管道方案、exec等不会,能否介绍一下这几种方案的优劣
crows
6
如果你对几毫秒耗时无感,这些方法没什么大的优劣。
管道只是其中最快的而已。
写入 .py 涉及文件读写,延迟大
命令行只能加载简单代码
exec() 相当于初始化两次
我找到解决方法了,python.exe 不过是对 python.dll 的包装,我自己写个包装器就好了。
crows
7
谢谢,能贴出调用方的代码吗?我怀疑是我调用代码没写好。
dddd
8
这个就是全部的代码了
如果你想两个程序在不同的终端调用,我只能给出bash的代码
执行端
mkfifo test_pipe_in_python
python < test_pipe_in_python
写入端
echo "print('hello')" > test_pipe_in_python
crows
9
谢谢,这和 Window 差异这么大,没有可参考性了
其实 Windows 可以使用相同的方法,Windows 命令提示符和 Linux Shell 一样支持管道重定向:
具体语法如下:
echo 要执行的命令 | python
但是如果涉及特殊字符可能要做一下转义。
python -c "print('hello')"
官方文档里都写着的
哇擦,楼上挖的坟
crows
13
只能加载简单字符串,如果代码包含",怎样转义都无法加载,我试过
我也试过,能转义啊,当初还费了老鼻子劲一点点改的。