本地执行graph命令正常,远程SSH执行出现AttributeError错误求助
问题分析与解决方法
这个报错的核心矛盾很清晰,我来帮你拆解:
为什么会出现这个错误?
你看到的AttributeError: 'file' object has no attribute 'buffer'是Python 2和Python 3对标准输入(stdin)的处理差异导致的:
- 在Python 3中,
sys.stdin是文本流对象,必须通过.buffer属性才能读取二进制原始数据; - 但在你使用的Python 2.7里,
sys.stdin本身就是二进制模式的文件对象,根本没有.buffer这个属性。
而本地执行正常、远程SSH执行报错的关键是:远程执行时,graph命令意外触发了「读取标准输入」的分支——本地执行时因为正确识别了输入文件路径,所以根本没走到这个逻辑里。
解决方法
方法一:先确保远程命令能正确找到输入文件
远程执行时,很可能因为工作目录差异,导致graph命令找不到shared/feed.csv,从而 fallback 到读取stdin。你可以试试这两个小调整:
- 使用绝对路径指定文件,彻底避免工作目录的影响:
ssh -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.1.37 graph /home/pi/shared/feed.csv -y 9,10 --ylabel Temp --title CabinTemp --figsize 1600x1000 --output /home/pi/shared/zzzz07.png - 显式指定工作目录,在命令前加上目录切换:
ssh -i /etc/dropbear/dropbear_rsa_host_key pi@192.168.1.37 "cd /home/pi && graph shared/feed.csv -y 9,10 --ylabel Temp --title CabinTemp --figsize 1600x1000 --output shared/zzzz07.png"
方法二:修复graph_cli的Python 2兼容性问题
如果路径没问题,但还是触发了读stdin的逻辑,那就要修改graph_cli的代码来兼容Python 2.7:
- 打开报错的文件:
/usr/local/lib/python2.7/dist-packages/graph_cli/graph.py - 找到
read_chain函数里的data = stdin.buffer.read()这一行,替换成兼容Python 2/3的代码:import sys if sys.version_info >= (3, 0): data = sys.stdin.buffer.read() else: data = sys.stdin.read() - 保存文件后,重新执行远程SSH命令即可。
内容的提问来源于stack exchange,提问作者nodecentral
相关产品推荐
相关产品推荐

