J'ai commencé dans ce trou de lapin comme un moyen de me familiariser avec la façon de créer un script de configuration en python. Le choix de python était simplement enraciné dans ma familiarité avec lui alors que je suis sûr qu'il y aurait de meilleures alternatives que python pour cette tâche.
Le but de ce script était d'installer ROS sur la machine exécutant le script et également de configurer l'environnement catkin. Les directions peuvent être trouvées ici et ici , respectivement.
Le script tel qu'il se trouve actuellement est le suivant:
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"])
Lorsque le script est actuellement exécuté, il génère une erreur avec l'erreur:
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
J'ai vérifié que la commande fonctionne correctement lorsqu'elle est exécutée manuellement à partir d'une fenêtre de terminal, et en tant que telle, je pense que c'est un malentendu fondamental sur la façon dont ce script et sa portée sont traités dans le système d'exploitation. La partie qui me cause beaucoup de confusion est la raison pour laquelle il se plaint de ne pas pouvoir localiser le répertoire fourni, alors que j'ai vérifié que ce répertoire existe. Lorsque la commande est plutôt imprimée à partir de python et collée dans une fenêtre de terminal, aucune erreur n'est rencontrée.
cwd
argument àcall
os.chdir()