23

I have a python script which takes some 5 arguments( a filename, 3 int values and 2 float values). I need to call this python script from R. How can I do that. I am trying to use rPython, but it doesnt allow me to pass the argument

library("rPython")
python.load("python scriptname")

I dont know how to pass the arguments

from command line, i run my python script like:

python scriptname filename 10 20 0.1 5000 30
3
  • What does example(python.load) or ?python.load tell you? Commented Jan 13, 2017 at 16:01
  • Check if this is relevant stackoverflow.com/questions/40667328/… Commented Jan 13, 2017 at 16:05
  • The reticulate package is a nice alternative to rPython Commented Jan 6, 2020 at 12:40

2 Answers 2

36

You can invoke a system command

system('python scriptname')

To run the script asynchronously you can set the wait flag to false.

system('python scriptname filename 10 20 0.1 5000 30', wait=FALSE)

The arguments that get passed as they would in command line. You will have to use sys.argv in the python code to access the variables

#test.py
import sys

arg1 = sys.argv[1]
arg2 = sys.argv[2]
print arg1, arg2

The R command below would output 'hello world'

system('python test.py hello world', wait=FALSE)
Sign up to request clarification or add additional context in comments.

6 Comments

great. but system commands waits for the python program to get completed. is there any way it wont wait,
@user1631306 yes, Documentation is here. add wait=False
So using this I'd have to manually type in the entire path to a file if I'm passing a text file as an argument. Is there a way to instead give it a variable name that has the path stored in it? This way I can automate my R script for any input text file.
Never mind, I found the "system2" command in R with a bit of Googling: mango-solutions.com/blog/…
> system('python --version') Warning message: running command 'python --version' had status 127
|
9

There is a small typo in the great previous answer. The right code is the following:

 system('python test.py hello world', wait = FALSE)

where wait is FALSE (not wait=Flase or wait=False)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.