मैंने इस खरगोश के छेद को अपने आप से परिचित करने के लिए एक साधन के रूप में शुरू किया कि कैसे अजगर में एक सेटअप स्क्रिप्ट बनाने के बारे में जाना जाएगा। अजगर की पसंद बस इसके साथ मेरी परिचितता में निहित थी, जबकि मुझे यकीन है कि इस कार्य के लिए अजगर की तुलना में बेहतर विकल्प होंगे।
इस स्क्रिप्ट का लक्ष्य ROS को स्क्रिप्ट चलाने वाली मशीन पर स्थापित करना था और कैटकिन वातावरण को भी सेटअप करना था। दिशाएं क्रमशः और यहां , यहां और यहां पाई जा सकती हैं।
वर्तमान में जो स्क्रिप्ट बैठता है वह इस प्रकार है:
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
मैंने सत्यापित किया है कि टर्मिनल विंडो से मैन्युअल रूप से निष्पादित होने पर कमांड सही ढंग से काम करता है, और जैसा कि मेरा मानना है कि यह एक मूल गलतफहमी है कि यह स्क्रिप्ट और इसका दायरा ओएस के भीतर कैसे संभाला जाता है। जो हिस्सा मुझे बहुत भ्रम में डाल रहा है, वह यह है कि यह शिकायत करता है कि यह प्रदान की गई निर्देशिका का पता लगाने में असमर्थ है, जबकि मैंने सत्यापित किया है कि यह निर्देशिका मौजूद है। जब कमांड को अजगर से मुद्रित किया जाता है और टर्मिनल विंडो में चिपकाया जाता है, तो कोई त्रुटि नहीं आती है।
cwd
तर्क पास करेंcall
os.chdir()