Ho iniziato questa tana di coniglio come mezzo per familiarizzare con come si sarebbe potuto creare uno script di installazione in Python. La scelta di Python era semplicemente radicata nella mia familiarità con esso mentre sono sicuro che ci sarebbero alternative migliori di Python per questo compito.
L'obiettivo di questo script era installare ROS sul computer che esegue lo script e anche impostare l'ambiente catkin. Le indicazioni possono essere trovate qui e qui , rispettivamente.
Lo script così com'è attualmente è il seguente:
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"])
Quando lo script è attualmente in esecuzione, si esaurisce con l'errore:
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
Ho verificato che il comando funzioni correttamente quando eseguito manualmente da una finestra del terminale e, pertanto, credo che questo sia un malinteso fondamentale su come questo script e il suo ambito vengono gestiti all'interno del sistema operativo. La parte che mi sta causando molta confusione è il motivo per cui si lamenta che non è in grado di individuare la directory fornita, mentre ho verificato che questa directory esiste. Quando il comando viene piuttosto stampato da Python e incollato in una finestra del terminale, non si riscontrano errori.
cwd
argomento acall
os.chdir()