Ich begann dieses Kaninchenloch, um mich mit der Erstellung eines Setup-Skripts in Python vertraut zu machen. Die Wahl von Python beruhte einfach auf meiner Vertrautheit damit, während ich sicher bin, dass es für diese Aufgabe bessere Alternativen als Python geben würde.
Das Ziel dieses Skripts war es, ROS auf dem Computer zu installieren, auf dem das Skript ausgeführt wird, und auch die Catkin-Umgebung einzurichten. Eine Wegbeschreibung finden Sie hier bzw. hier .
Das aktuelle Skript lautet wie folgt:
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"])
Wenn das Skript gerade ausgeführt wird, tritt ein Fehler mit dem Fehler auf:
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
Ich habe überprüft, ob der Befehl korrekt funktioniert, wenn er manuell über ein Terminalfenster ausgeführt wird. Daher glaube ich, dass dies ein grundlegendes Missverständnis darüber ist, wie dieses Skript und sein Umfang innerhalb des Betriebssystems behandelt werden. Der Teil, der mich sehr verwirrt, ist, warum er sich beschwert, dass das bereitgestellte Verzeichnis nicht gefunden werden kann, während ich überprüft habe, dass dieses Verzeichnis vorhanden ist. Wenn der Befehl eher aus Python gedruckt und in ein Terminalfenster eingefügt wird, treten keine Fehler auf.
cwd
Argument einfach ancall
os.chdir()