`system ()` интерактивный .exe / бинарный от R / Rgui - PullRequest
4 голосов
/ 08 марта 2012

Я бы хотел запустить интерактивный двоичный файл, используя system() в R.

Предполагается, что в интерактивном режиме я хотел запустить интерпретатор командной строки python изнутри R (кто знает почему, но в любом случае ...).

Когда я запускаю R из командной строки (т. Е. Rterm), я могу запустить интерпретатор python так:

> system('python.exe')
Python 2.7.2 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> # I can now type in python commands and basically use the python 
    # interpreter until I've had enough. 
    # Now I'll exit the python interpreter:
>>> exit()
> # Presto, I'm back to the R prompt!

Суть в том, что я могу взаимодействовать с интерпретатором python из R так же, как если бы я сначала запустил интерпретатор из командной строки, и я могу выйти из него, когда я закончу, чтобы вернуться к R проворная.

Теперь давайте попробуем то же самое с графическим интерфейсом R:

> system('python.exe')
Python 2.7.2 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
> # eh? it exitted?

Это просто запускает python.exe (отображает это приветственное сообщение), но затем сразу завершается - я не могу взаимодействовать с интерпретатором python.

Мой вопрос - есть ли способ (в R GUI, то есть в Windows) запустить этот интерпретатор и взаимодействовать с ним так же, как это работает с любой версией R для командной строки?

(К вашему сведению - когда я впервые начал изучать, как писать пакеты R, моей целью, как моим первым пакетом R, было просто иметь возможность играть nethack в R. Работал великолепно (я использую linux командная строка R), за исключением случаев, когда я переносил его в Windows RGui, он запускал процесс, но не был интерактивным, фактически блокируя R, пока я принудительно не завершил процесс NetHack.exe).

1 Ответ

4 голосов
/ 08 марта 2012

Я разобрался - пришлось читать файл справки под Windows (получается, что unix & windows ?system отличаются):

Не пытайтесь запускать консольные приложения, которые требуют ввода пользователя из Rgui с настройкой intern=TRUE или show.output.on.console=TRUE. Они не будут работать.

Похоже, лучшее, что я получу (во всяком случае, от Rgui) - это запуск нового окна:

system('NetHack.exe',invisible=FALSE,wait=FALSE)

Я добавлю проверку if ( .Platform$GUI == "Rgui" ) для этого и соответствующим образом установлю параметры.

(Huzzah, далее квест NetHackR!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...