Tôi bắt đầu xuống cái hố thỏ này như một phương tiện để làm quen với cách người ta sẽ tạo ra một kịch bản thiết lập trong python. Sự lựa chọn của python chỉ đơn giản bắt nguồn từ sự quen thuộc của tôi với nó trong khi tôi chắc chắn sẽ có những lựa chọn thay thế tốt hơn python cho nhiệm vụ này.
Mục tiêu của tập lệnh này là cài đặt ROS lên máy chạy tập lệnh và cũng thiết lập môi trường catkin. Hướng dẫn có thể được tìm thấy ở đây và ở đây , tương ứng.
Kịch bản như hiện tại là như sau:
subprocess.call(["sudo", "sh", "-c", "'echo \"deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main\" > /etc/apt/sources.list.d/ros-latest.list'"])
subprocess.call(["sudo", "apt-key", "adv", "--keyserver", "hkp://ha.pool.sks-keyserver.net:80", "--recv-key", "0xB01FA116"])
subprocess.call(["sudo", "apt-get", "update"])
subprocess.call(["sudo", "apt-get", "install", "ros-kinetic-desktop-full", "-y"])
subprocess.call(["sudo", "rosdep", "init"])
subprocess.call(["rosdep", "update"])
subprocess.call(["echo", '"source /opt/ros/kinetic/setup.bash"', ">>", "~/.bashrc", "source", "~/.bashrc"])
subprocess.call(["sudo", "apt-get", "install", "python-rosinstall", "-y"])
mkdir_p(os.path.expanduser('~') + "/catkin_ws/src")
subprocess.call(["(cd "+ os.path.expanduser('~') + "/catkin_ws/src)"])
subprocess.call(["(cd "+ os.path.expanduser('~') + "/catkin_ws && catkin_make)"])
subprocess.call(["(cd "+ os.path.expanduser('~') + "/catkin_ws && source devel/setup.bash"])
Khi tập lệnh hiện đang chạy, nó bị lỗi với lỗi:
Traceback (most recent call last):
File "setup.py", line 46, in <module>
subprocess.call(["(cd "+ os.path.expanduser('~') + "/catkin_ws/src)"])
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Tôi đã xác minh rằng lệnh hoạt động chính xác khi được thực hiện thủ công từ cửa sổ đầu cuối và vì vậy tôi tin rằng đây là một sự hiểu lầm cơ bản về cách tập lệnh này và phạm vi của nó được xử lý trong HĐH. Phần gây ra cho tôi rất nhiều nhầm lẫn là tại sao nó phàn nàn rằng nó không thể xác định vị trí thư mục được cung cấp, trong khi tôi đã xác minh rằng thư mục này tồn tại. Khi lệnh được in từ python và dán vào cửa sổ terminal, không gặp lỗi.
cwd
đối số chocall
os.chdir()