Saya memulai lubang kelinci ini sebagai sarana untuk membiasakan diri dengan bagaimana orang akan membuat skrip pengaturan dengan python. Pilihan python hanya berakar pada keakraban saya dengan itu sementara saya yakin akan ada alternatif yang lebih baik daripada python untuk tugas ini.
Tujuan skrip ini adalah menginstal ROS ke mesin yang menjalankan skrip dan juga mengatur lingkungan catkin. Arah dapat ditemukan di sini dan di sini , masing-masing.
Script saat ini duduk adalah sebagai berikut:
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"])
Ketika skrip saat ini berjalan itu kesalahan keluar dengan kesalahan:
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
Saya telah memverifikasi bahwa perintah itu berfungsi dengan benar ketika dieksekusi secara manual dari jendela terminal, dan karena itu saya percaya ini adalah kesalahpahaman mendasar tentang bagaimana skrip ini dan ruang lingkupnya ditangani dalam OS. Bagian yang menyebabkan saya banyak kebingungan adalah mengapa ia mengeluh bahwa ia tidak dapat menemukan direktori yang disediakan, sementara saya telah memverifikasi bahwa direktori ini ada. Ketika perintah agak dicetak dari python dan disisipkan ke jendela terminal tidak ada kesalahan yang ditemui.
cwd
call
os.chdir()