2013-04-02 2 views
0

Мне было интересно, как открыть скрипт R и взаимодействовать с ним (например, отправлять строки, целые числа и т. Д.). Хотя я еще не использовал его раньше, подпроцесс казался разумным способом сделать это.Взаимодействие с скриптом R через подпроцесс Python

До сих пор у меня есть

process = subprocess.Popen(['/path/to/Rscript --no-save path/to/script.R'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True) 

Это, как представляется, чтобы быть успешным в открытии script.R, однако в моем сценарии я предложит пользователю ввести целое число, и я не могу совсем разобраться, как это сделать. Я пробовал:

process.communicate(input=1)[0] 

Но я, кажется, лаяю неправильное дерево. Подпроцесс закрывается, не появляясь для получения этого ввода.

EDIT: Rpy, вероятно, не является хорошей альтернативой на данный момент, потому что пользователи этого скрипта не обязательно будут иметь доступ к этому модулю и его зависимостям.

+0

что является результатом 'process.communicate (input = 1)'? – User

+0

Правильно - хороший вопрос, я должен был указать, что вижу * no * видимый результат в результате process.communicate (input = 1) –

ответ

2

Попробуйте PypeR?

Это отличный интерфейс для использования R в python через трубу.

+0

Это было действительно полезно, спасибо. Используя этот подход, я смог отправлять команды в свои сценарии. –

1

EDIT2

Что об этом?

process = subprocess.Popen(['/path/to/Rscript', '--no-save', 'path/to/script.R'], stdout=subprocess.PIPE, stdin=subprocess.PIPE) 

EDIT1

Вы можете только между строками общаются процессами над стандартным вводом и стандартным выводом.

Помогает ли вам process.communicate("1\n")?

+0

К сожалению, нет. Различие между строкой и int не имеет значения, поскольку процесс закрывается до того, как вход может быть передан. –

+0

Да, это помогает. Теперь я могу передать строки в подпроцесс через process.stdin.write ('source ("script.R")') Это шаг вперед, спасибо! –

Смежные вопросы