在zb_control.py中启动adxl345test.py报错/bin/sh:1:未找到文件的解决方法
解决
adxl345test.py: not found 错误的实用方案 你遇到的这个报错本质是系统要么找不到指定的脚本文件,要么不知道该用什么解释器来运行它,咱先拆解原因,再给你对应的解决办法:
报错原因拆解
出现/bin/sh: 1: adxl345test.py: not found通常是这几个情况:
- 脚本不在当前程序的工作目录里,你又没写完整的绝对路径
- 脚本没有设置可执行权限,系统没法直接运行它
- 脚本开头没加shebang声明,而且调用时没明确指定Python解释器
方案1:直接指定Python解释器调用(最稳妥)
这是最不容易踩坑的方式,直接告诉系统用Python来运行脚本,同时一定要写脚本的绝对路径(避免当前工作目录变化导致找不到文件)。修改你zb_control.py里的run分支代码:
if inc == 'run': print("---------------") print("Collecting data") print("---------------") # 替换成你实际的Python版本(树莓派常用python3)和脚本绝对路径 p = subprocess.Popen(["python3", "/home/pi/adxl345test.py"], stdout=subprocess.PIPE)
比如你的脚本放在/home/pi/projects/目录下,就把路径改成/home/pi/projects/adxl345test.py。
方案2:给脚本加可执行权限和shebang(进阶方式)
如果你想直接像运行命令一样启动脚本(不用写python前缀),需要两步操作:
- 给脚本加shebang行:打开
adxl345test.py,在最顶部添加这一行:
#!/usr/bin/env python3
这行代码告诉系统“用系统里的python3解释器来运行这个脚本”。
2. 设置可执行权限:打开终端,执行命令给脚本加权限:
chmod +x /home/pi/adxl345test.py
完成后,修改zb_control.py的调用代码,还是要写绝对路径:
p = subprocess.Popen(["/home/pi/adxl345test.py"], stdout=subprocess.PIPE)
额外的代码优化建议
你的脚本还有两个潜在问题,顺便帮你优化下:
- 如果用户先输入
stop再输入run,变量p还没定义,会直接报错NameError - 每次循环都重新打开串口,其实没必要,会浪费资源
优化后的完整代码:
import serial, time, subprocess # 提前初始化串口,避免每次循环重复打开 ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=2) # 用变量跟踪数据采集进程的状态 data_process = None while True: # 串口读取的是字节,要解码成字符串再对比 inc = ser.readline().strip().decode('utf-8') if inc == 'run': # 检查进程是否未启动或已经结束,避免重复启动 if data_process is None or data_process.poll() is not None: print("---------------") print("Collecting data") print("---------------") # 替换成你的脚本绝对路径 data_process = subprocess.Popen(["python3", "/home/pi/adxl345test.py"], stdout=subprocess.PIPE) else: print("Data collection is already running!") elif inc == 'stop': # 检查进程是否正在运行,再执行停止操作 if data_process is not None and data_process.poll() is None: data_process.kill() data_process = None print("-----------------------") print("Script has been stopped") print("-----------------------") else: print("No data collection process is running!")
这个版本会帮你避免重复启动、误停止不存在的进程,同时串口也只初始化一次,更稳定。
内容的提问来源于stack exchange,提问作者user75374
相关产品推荐
相关产品推荐

