Beaglebone平台下C调用Python脚本无法写入buf文件问题排查
解决BeagleBone上C调用Python脚本无法更新buf文件的问题
嘿,这个问题我之前也碰到过!核心原因大概率是工作目录不匹配,给你拆解下:
当你手动在终端跑Python脚本时,脚本的工作目录就是你当前所在的/root/LED_Tester_V1/LuxRead/,所以buf文件乖乖生成在这个目录里。但用C的system()调用时,C程序的工作目录不一定是这个路径——比如如果你的C程序是在其他目录编译运行的,脚本里用相对路径open('buf', 'w')就会把文件写到C程序的工作目录里,而不是你预期的位置,看起来就像buf没更新。
给你两个靠谱的修复方案:
方案1:给buf文件用绝对路径(最稳妥)
直接修改Python脚本里的文件打开代码,把相对路径换成绝对路径:
# 原来的f = open('buf', 'w')改成下面这样 f = open('/root/LED_Tester_V1/LuxRead/buf', 'w')
这样不管脚本在哪个目录运行,都会精准写入到你指定的位置,完全避开工作目录的问题。
方案2:调用脚本前先切换目录
修改C语言里的宏定义,先cd到脚本所在目录再执行脚本:
#define luxreadpy "cd /root/LED_Tester_V1/LuxRead && /usr/bin/python lux.py" system(luxreadpy);
这样脚本运行时的工作目录就和你手动运行时完全一致,相对路径就能正确找到buf文件。
额外排查小技巧
虽然你说权限已经设为777,但可以加个小验证:在Python脚本里加上当前工作目录的打印,方便确认问题:
import os print("脚本当前工作目录:", os.getcwd())
然后通过C程序调用后,查看输出(如果C程序有控制台输出的话),就能一眼看到脚本到底在哪个目录运行,是不是和你预期的一样。
内容的提问来源于stack exchange,提问作者Pukacza
相关产品推荐
相关产品推荐

