ฉันเริ่มรูกระต่ายนี้เพื่อทำความคุ้นเคยกับการสร้างสคริปต์การตั้งค่าในไพ ธ อน ทางเลือกของหลามนั้นมาจากความคุ้นเคยของฉันในขณะที่ฉันมั่นใจว่าจะมีทางเลือกที่ดีกว่างูหลามสำหรับงานนี้
เป้าหมายของสคริปต์นี้คือการติดตั้ง 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()