我正在尝试使用Python的KCL库(https://github.com/awslabs/amazon-kinesis-client-python)构建Amazon Kinesis Python使用者。我首先检查了示例代码。我能够运行示例代码的生产者和消费者脚本部分,但是我无法验证来自我的kinesis流(带有一个分片)的数据是否被推送到示例Python使用者脚本,sample_kclpy_app.py
我使用amazon_kclpy_helper.py
生成可以通过sample.properties
文件调用Python脚本的Java命令。我运行了Java命令,我可以从终端输出中看到正在读取Kinesis流中的数据。我在Python使用者脚本的print
函数中添加了process_record
语句,以检查数据是否被推送到它。但它没有出现在终端输出中。
我还尝试使用logging
生成STDOUT消息,以及写入文件。我还在Python代码中添加了assert 0
行来强制使脚本失败,并在日志输出中看到异常。然后,我特意在Python代码中添加了语法错误。但是,似乎所有这些都没有被Java MultiLangDaemon检测到,它只是继续生成INFO日志消息。
可能是什么问题?
有没有更好的方法来检查数据是否确实被发送到Python使用者脚本的process_record
函数?
答案 0 :(得分:6)
经过多次试验和错误后,我发现分配给executableName
的Python脚本应该从调用它的Java KCL进程中可见。
快速解决方法是将PATH
环境变量设置为脚本目录,并使脚本成为可执行文件(例如chmod +x
)
答案 1 :(得分:4)
我遇到了同样的问题,我的代码似乎从未运行过。直到我查看Node版本,才意识到executableName
中的sample.properties
是运行的命令,而不仅仅是python文件的名称。我将executableName = sample_kclpy_app.py
更改为executableName = python sample_kclpy_app.py
,它开始按预期工作。