# Revision history [back]

### run ros terminal commands within a python script

I have my ros program ready, and I can control my robot using the terminal commands. Now, I am trying to write a python script to control the robot as I do with the terminal commands. For this purpose, I have been trying several methods explained by others. As expected, I begin with starting the roscore. However, I get error and cannot proceed. Here are what I have done so far:

1- As given here, I ran the following code

import subprocess
roscore = subprocess.Popen('roscore')
time.sleep(1)


and got this error:

>>> runfile('/opt/ros/kinetic/bin/run_roscore.py', wdir='/opt/ros/kinetic/bin')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile
execfile(filename, namespace)
File "/usr/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile
builtins.execfile(filename, *where)
File "/opt/ros/kinetic/bin/run_roscore.py", line 20, in <module>
roscore = subprocess.Popen('roscore')
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory


2- Trying the same code with shell=True option,

roscore = subprocess.Popen('roscore', shell=True)


gives the output:

runfile('/opt/ros/kinetic/bin/run_roscore.py', wdir='/opt/ros/kinetic/bin')


3- I also tired other libaries: os and commands

import os
os.system('roscore')


and

import commands
a=commands.getoutput('roscore')
print a


to get the same error:

runfile('/opt/ros/kinetic/bin/run_roscore.py', wdir='/opt/ros/kinetic/bin')


4- I can run general linux commands with no error. For example the codes below successfully lists the files:

os.system('ls -l')
subprocess.Popen('ls -l', shell=True)
a=commands.getoutput('ls -l')
print a


Here, run_roscore.py is my python file and I placed it in the same directory with roscore file.

According to my intuition, it looks like a problem with setup.bash file, but I cannot figure out what the problem is.

I am using ROS Kinetic and Ubuntu 16.04 LTS on Nvidia Jetson TX2 developer kit

When giving your answer please, keep in mind that I am not experienced with ROS and Ubuntu environments. So I appreciate if you provide the steps clearly.

Also, please note that starting the roscore is an error I encountered at the beginning of my ultimate goal. At the next steps, I will need to run other commands such as

rostopic pub servo std_msgs/UInt16 80


and

rosrun rosserial_python serial_node.py /dev/ttyACM0


So you may also provide a general recommendation covering my overall goal.