Bu tavşan deliğini bir kişinin python'da bir kurulum betiği oluşturmaya nasıl gideceğini tanımak için bir araç olarak başladım. Bu görev için python'dan daha iyi alternatifler olacağından eminim, python seçimi basitçe ona aşina olmama dayanıyordu.
Bu komut dosyasının amacı, komut dosyasını çalıştıran makineye ROS yüklemek ve aynı zamanda catkin ortamını kurmaktı. Yol tarifleri sırasıyla burada ve burada bulunabilir .
Şu anda oturur komut dosyası aşağıdaki gibidir:
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"])
Komut dosyası şu anda çalıştırıldığında hatayla hata veriyor:
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
Komutun el ile bir terminal penceresinden yürütüldüğünde doğru çalıştığını doğruladım ve bu nedenle bu komut dosyasının ve kapsamının işletim sistemi içinde nasıl işlendiği hakkında temel bir yanlış anlama olduğuna inanıyorum. Bana çok fazla karışıklık neden olan kısmı, bu dizinin var olduğunu doğrularken neden sağlanan dizini bulamıyor olduğundan şikayet ediyor. Komut python'dan yazdırıldığında ve bir terminal penceresine yapıştırıldığında hatalarla karşılaşılmaz.
cwd
call
os.chdir()