自定义了一个功能包txtread,修改了CMakeLists.txt和package.xml,catkin_make顺利,看到了终端显示traversing 7 packages in topological order中有txtread。roscore后,rosrun txtread txtread.py时,报错:
$ rosrun txtread txtread.py
[rospack] Error: package ‘txtread’ not found
没找到功能包,用tab也确实看不到txtread。
参考链接,先在catkin工作路径~/catkin_ws_txt下运行
cd ~/catkin_ws_txt
source ~/catkin_ws_txt/devel/setup.bash
使环境变量有效后,再输入rosrun txt,tab键可以自动出txtread了。
永久设置source的方法: 在终端修改bashrc。
gedit ~/.bashrc
在尾端加上source ~/catkin_ws_txt/devel/setup.bash,保存。
命令source ~/.bashrc使之生效。
但是python文件仍然tab不出来。运行rosrun txtread txtread.py后报错:
[rosrun] Couldn’t find executable named txtread.py below /home/xxx/catkin_ws_txt/src/txtread
[rosrun] Found the following, but they’re either not files,
[rosrun] or not executable:
[rosrun] /home/xxx/catkin_ws_txt/src/txtread/src/txtread.py
没有找到可执行文件,按道理python文件只要保存一下,不用catkin_make编译,就是可执行的。问题出在哪了?
参考链接,python文件没有权限,转到txtread.py所在目录,用chmod +x命令设置文件权限:
~/catkin_ws_txt/src/txtread/src$ chmod +x txtread.py
再运行就ok了。
chmod详见链接
程序中包含读取txt文件的语句
filename = 'a.txt'
fp = open(filename,'r')
报错IOError: [Errno 2] No such file or directory: 'a.txt’
在文件所在文件夹打开终端。
修改了文件权限:chmod 777 a.txt
查看文件权限:ls -l a.txt
重新运行没有成功。
用vim打开,查看编码方式:
vi a.txt
:set ff
:wq
为unix的编码方式。
python的open():如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
但是代码文件和要打开的文件就在一个文件夹。
修改路径为绝对路径:
filename = '/home/xxx/catkin_ws_txt/src/txtread/a.txt'
fp = open(filename,'r')
注:在a.txt所在文件打开终端,pwd命令查看绝对路径。一定要用pwd看,自己以为的路径很容易错!
至此解决了IOError。
参考链接
python读取txt内容需要注意的是,Windows 中默认的文件格式是 cp936(通常被视为等同 GBK), 而 Linux 一般都是 UTF-8。
使用 open() 打开文件时,默认采用 GBK 编码。但当要打开的文件不是 GBK 编码格式时,可以在使用 open() 函数时,手动指定打开文件的编码格式。
不过用语句rospy.loginfo(fp.encoding)打印文件编码方式时,输出是None,不知道是为什么,好像在roboware中的python默认不能正常查看和改变编码方式。
在所在文件夹打开终端,用vi a.txt打开文件,:set fileencoding命令查看编码方式,为utf-8。
以16进制查看文件内容:
链接
将shell命令的结果输出到txt文件中:
使用>>追加的方式,把ls命令打印出的内容保存到txt格式的hello文件中。
ls >> hello.txt
在命令执行的路径下会多出一个hello.txt