Запустите скрипт Ruby с Python

У меня есть Ruby Script, который, когда я запускаю в оболочке, работает (как пользователь):

/home/user/wpscan/$ ruby ./wpscan.rb -u www.mysite.com

Однако я хотел бы автоматизировать это с помощью функции, которую я создал с помощью Python. Вот скрипт python:

 #!/usr/bin/python import os wpscan_env = "/wpscan/" os.chdir(os.environ['HOME'] + wpscan_env) os.system("ruby ./wpscan.rb -u www.mysite.com") 

Обратите внимание, что скрипт Python находится в другой папке: home/user/python/first.py и именно поэтому я выполняю os.chdir() . Когда я вернусь к оболочке и напечатаю:

/home/user/python/$ python first.py

Это результат, который я получаю:

Не удалось найти адресный-2.4.0 в любом из источников

Запустите `bundle install`, чтобы установить отсутствующие драгоценные камни.

Я использую Ubuntu 14.04 и для того, чтобы заставить wpscan работать, он попросил меня установить Ruby 2.3.0. Я сделал это через RVM.

wpscan.rb имеет несколько зависимостей, и, похоже, это не создает их. Также, если я попал в папку wpscan и делаю ruby ./wpscan.rb ... он будет работать. Однако, если я попытаюсь сделать это из домашнего каталога: ruby wpscan/wpscan.rb ... он выдает ошибку:

[ERROR] не может загрузить такой файл –typhoeus

[TIP] попробуйте запустить «gem install typhoeus» или «gem install –user-install typhoeus». Если вы все еще получаете сообщение об ошибке, см. Файл README или https://github.com/wpscanteam/wpscan

Я не знаю Ruby, это мой первый настоящий скрипт Python, и я только что установил wpscan 2 ночи назад. Я вышел из своей лиги, и мне нужна помощь. Любой вопрос может быть уточнен по запросу.

Скорее всего, ruby в вашем скрипте python не совпадает с ruby в вашей оболочке. Это может произойти, если у вас, например, установлен рубиновый режим по умолчанию (например, из системных пакетов), и вы устанавливаете другую рубиновую версию через RVM.

При использовании оболочки RVM автоматически загружает свою среду из сценариев инициализации оболочки (например, ~/.bashrc ) и знает, какой рубин использовать из своих настроек. В то время как ваш скрипт python не загружает среду rvm (это не оболочка входа) и вызывает стандартную рубиновую систему.

В этом случае вам нужно явно вызвать правильный рубин из RVM в вашем скрипте python. Вы можете сделать это, вызвав обертку RVM:

  • просматривать каталоги под ~/.rvm/wrappers/ и найти правильную рубиновую версию и gemset, которые вы хотите использовать
  • в вашем скрипте python вызовите команду ruby из этой директории-оболочки, а не простой «ruby», что-то вроде:
 rvm_ruby = os.environ['HOME'] + "/.rvm/wrappers/ruby-2.3.0-p100@myproject/ruby" os.system(rvm_ruby + " ./wpscan.rb -u www.mysite.com") 

Это должно решить вашу проблему.