如何打开终端并粘贴这些命令?

时间:2019-03-05 01:08:14

标签: python shell

我正在运行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

2 个答案:

答案 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"

通过这种方式:

  1. 如果需要添加其他与ROS相关的命令(例如,您提到在the other answer中添加sleep),则可以扩展shell脚本
  2. 您可以单独测试shell脚本
  3. 它解决了“ 它不在同一终端中运行所有行”的问题