我正在努力学习一个简单的Python脚本,我想从另一个用Python编写的程序中调用它。由于我对Python很陌生,我不知道如何解决这个问题。
我使用Artisan在一个集成的解释器中运行。 Artisan让我定义按钮来触发动作,例如调用外部脚本。 在我的例子中,这个外部脚本应该通过串口与Arduino通信。我的外部脚本最初是用Python3编写的,但出于测试目的,我还将代码更改为Python2。 这就是它的样子:
#!/usr/bin/env python3
import sys
import time
import serial
PORT = '/dev/tty.usbmodemFA131'
with serial.Serial(PORT, 9600) as arduino:
time.sleep(2)
arduino.write(sys.argv[1].encode('ASCII'))
print(arduino.readline())
当我从终端运行此代码时(我使用的是MacOS 10.11.5),它的效果与预期的一样。
当我从Artisan中调用它时,Python崩溃,显示以下通知:
上次登录时间:7月13日星期三07:21:46 ttys000 Philipps-Air:~philipp $ /Applications/Artisan.app/Contents/MacOS/Artisan;出口; 7月13日 07:22:20工匠[40170]: /Applications/Artisan.app/Contents/Resources/lib/python2.7/site-packages.zip/matplotlib/font_manager.py:273: UserWarning:Matplotlib正在使用fc-list构建字体缓存。这个 可能需要一点时间。 7月13日07:22:57工匠[40170]:致命 Python错误:Py_Initialize:无法加载文件系统编解码器7月 13 07:22:57 Artisan [40170]:ImportError:没有命名的模块 '编码' Jul 13 07:22:57 Artisan [40170]:Jul 13 07:22:57 Artisan [40170]:当前线程0x00007fff73660000(大多数 最近的电话会议:)
接下来,我试图从Artisan中调用另一个简短的脚本来调用上面的脚本:
from subprocess import call
call(['./arduino.py', sys.argv[1]])
导致同样的错误:/
将代码更改为Python2时,通知会更改,但脚本不会执行:
Jul 13 18:56:15 Artisan [40956]:Traceback(最近的电话 最后):Jul 13 18:56:15 Artisan [40956]:档案 " /Users/philipp/arduino.py" ;,第5行,7月13日18:56:15 工匠[40956]:导入序列7月13日18:56:15 Artisan [40956]:文件"序列号/ init .pyo",第13行,in 7月13日18:56:15 Artisan [40956]:档案 " serial / serialutil.pyo",第10行,7月13日18:56:15 Artisan [40956]:文件" io.pyo",第51行,7月13日 18:56:15 Artisan [40956]:ImportError: dlopen的(/Applications/Artisan.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so, 2):找不到符号:__PyCodecInfo_GetIncrementalDecoder 7月13日 18:56:15 Artisan [40956]:引用自: /Applications/Artisan.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so 7月13日18:56:15工匠[40956]:期待:平坦 7月13日18:56:15 Artisan [40956]:in /Applications/Artisan.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so
我尝试了 hash -r python ,但这并没有改变一件事。
我需要做什么才能让我的EXTERNAL Python(特别是Python3)解释器解释我的脚本,而不是使用Artisan集成的解释器?
所有脚本都是可执行的,必要的库都安装在Mac3附带的Python3和Python2中。
非常感谢你的帮助!
菲利普