파이썬에서 설정 스크립트를 만드는 방법에 익숙해지기 위해이 토끼 구멍을 시작했습니다. 파이썬의 선택은 단순히 이에 익숙하다는 데 뿌리를두고 있지만이 작업에는 파이썬보다 더 나은 대안이있을 것이라고 확신합니다.
이 스크립트의 목표는 스크립트를 실행하는 머신에 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
터미널 창에서 수동으로 실행할 때 명령이 올바르게 작동하는지 확인했으며, 이것이이 스크립트와 해당 범위가 OS 내에서 처리되는 방식에 대한 근본적인 오해라고 생각합니다. 많은 혼란을 초래하는 부분은 제공된 디렉토리를 찾을 수 없다고 불평하는 이유입니다.이 디렉토리가 존재하는지 확인했습니다. 파이썬에서 명령을 인쇄하고 터미널 창에 붙여 넣을 때 오류가 발생하지 않습니다.
cwd
에 인수call
os.chdir()