我正在运行Python脚本。当测得的海拔高度超过1米时,我需要在终端上运行该
cd ~
cd ~/catkin_ws_artag/src/launch
roslaunch pr2_indiv_1.launch
当它低于1米时,我需要在终端中运行它:
cd ~
cd ~/catkin_ws_artag/src/launch
roslaunch pr2_indiv_0.launch
我该怎么做?我尝试了类似的方法,但是没有用:
position = "low"
if marker.pose.position.z > 1 and position=="low":
os.system("cd ~")
os.system("cd ~/catkin_ws_artag/src/launch")
os.system("roslaunch pr2_indiv_1.launch")
position = "high"
print "HIGH"
################################
if marker.pose.position.z < 1 and position=="high":
os.system("cd ~")
os.system("cd ~/catkin_ws_artag/src/launch")
os.system("roslaunch pr2_indiv_0.launch")
position = "low"
print "LOW"
但是它说:[pr2_indiv_0.launch] is not a launch file name.
对该异常的回溯已写入日志文件,我认为这是因为它没有在同一终端中运行所有行。
我该如何进行这项工作?我正在使用Ubuntu 16.04
答案 0 :(得分:0)
如果您确定控制流正确(即在适当的时候显示HIGH
/ LOW
),我想这里的问题是您正在分别调用{ {1}}在单独的shell中执行它们。试试这个:
os.system
答案 1 :(得分:0)
如果需要执行多个shell命令,可以将它们全部放在shell脚本中。
ros-commands.sh
#!/bin/bash
LAUNCH_FILE=$1
cd ~/catkin_ws_artag/src/launch
roslaunch $1
确保它是可执行文件(即chmod +x ros-commands.sh
)。
然后将其放置在与Python脚本相同的目录中。
gino:ros$ ls
total 8
-rw-rw-r-- 1 gino gino 59 3月 5 13:18 your-python-script.py
-rwxrwxr-x 1 gino gino 74 3月 5 13:14 ros-commands.sh
在您的Python脚本中,调用Shell脚本。
(使用How to call a shell script from python code?中最活跃的答案)
your-python-script.py
import subprocess
position = "low"
if marker.pose.position.z > 1 and position=="low":
subprocess.call(['./ros-commands.sh', "pr2_indiv_1.launch"])
position = "high"
print "HIGH"
################################
if marker.pose.position.z < 1 and position=="high":
subprocess.call(['./ros-commands.sh', "pr2_indiv_0.launch"])
position = "low"
print "LOW"
通过这种方式:
sleep
),则可以扩展shell脚本