2013-11-12 6 views
0

Как вы можете запускать программу на C++ из сценария Ruby?Запуск программы на C++ из ruby ​​

Предположим, что сценарий Ruby генерирует файл под названием «hello.txt», и я хочу запустить программу на C++, чтобы взять файл hello.txt, работать с ним и написать другой файл под названием «result.txt» и скрипт Ruby продолжает читать файл result.txt.

Например, в оболочке Linux я написал g++ hello.c -c hello -o hello для получения файла "result.txt".

Есть ли способ, которым я могу запустить код оболочки из программы Ruby?

+0

Ваш пример команда компилирует файл C++ (пожалуйста, используйте .cpp в качестве расширения в следующий раз для здравомыслия) и не работает это, что будет достигнута впоследствии с '$ ./hello [ARGS] '. –

ответ

3

Вы можете использовать system как другие люди говорили, но вы должны также проверить значение выхода, чтобы проверить успех или неудачу.

r = system("g++ hello.c -c hello -o hello") #=> r = true if success, nil if failed 
1

Я считаю, что backticks более емким, чем system.

Вы можете запустить программу на C++, обстреляв следующим образом:

`./hello file.txt` 

Вы можете уточнить, нужно ли вам читать results.txt из текущего каталога?

Если да, то вы могли бы использовать что-то вроде contents = IO::readlines './results.txt'

+0

[Backticks] (http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-60) ведут себя иначе, чем ['system'] (http: //www.ruby- doc.org/core-2.0.0/Kernel.html#method-i-system); Первый возвращает результат STDOUT из дочернего приложения, тогда как 'system' возвращает статус вызываемого кода. Они не взаимозаменяемы, потому что они ведут себя по-другому. –

+0

Я согласен, но он не сказал, что изучает код ответа. Я предложил backticks, потому что он мог бы иметь result.txt явно возвращен к stdout из C++-программы вместо того, чтобы писать в файл (возможно, более UNIX-подобный), который будет работать хорошо здесь (избегая касания диска, а затем снова читающего после него). Нет никакого вреда при рассмотрении другого подхода :-) –

+1

Я должен был, вероятно, разработать немного больше в ретроспективе! –

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