Я начал с этой кроличьей норы как средства для ознакомления с тем, как можно было бы создать сценарий установки в python. Выбор python был основан на моем знакомстве с ним, хотя я уверен, что для этой задачи найдутся альтернативы лучше, чем python.
Цель этого сценария состояла в том, чтобы установить ROS на компьютере, на котором выполняется сценарий, а также настроить среду catkin. Направления можно найти здесь и здесь , соответственно.
Сценарий, в котором он сейчас находится, выглядит следующим образом:
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"])
Когда скрипт в настоящий момент выполняется, он выдает ошибку с ошибкой:
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
Я проверил, что команда работает правильно, когда выполняется вручную из окна терминала, и поэтому я считаю, что это фундаментальное недоразумение о том, как этот скрипт и его область действия обрабатываются в ОС. Часть, которая вызывает у меня большую путаницу, заключается в том, что она жалуется, что не может найти предоставленный каталог, хотя я проверил, что этот каталог существует. Когда команда выводится из python и вставляется в окно терминала, ошибок не возникает.
cwd
аргументcall
os.chdir()