使用 Python 运行 Ruby 脚本

Bla*_*ing 4 ruby

我有一个 Ruby 脚本,当我在 shell 中运行时它可以工作(作为用户):

/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")
Run Code Online (Sandbox Code Playgroud)

请注意,Python 脚本位于不同的文件夹中,home/user/python/first.py这就是我执行该os.chdir()函数的原因。当我回到 shell 并输入:

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

这是我得到的输出:

在任何来源中都找不到 addressable-2.4.0

运行 `bundle install` 来安装缺少的 gem。

我使用的是 Ubuntu 14.04,为了让 wpscan 工作,它要求我安装 Ruby 2.3.0。我是通过 RVM 做到的。

wpscan.rb有一些依赖项,似乎没有实例化它们。另外,如果我在 wpscan 文件夹中并且这样做ruby ./wpscan.rb ... 会起作用。但是,如果我尝试从主目录执行此操作:ruby wpscan/wpscan.rb ... 它会引发错误:

[错误] 无法加载此类文件 --typhoeus

[提示] 尝试运行“gem install typhoeus”或“gem install --user-install typhoeus”。如果仍然出现错误,请查看 README 文件或https://github.com/wpscanteam/wpscan

我对 Ruby 一无所知,这是我的第一个真正的 Python 脚本,我两天前才安装了 wpscan。我在这里已经脱离了我的联盟,我需要帮助。任何进一步的问题都可以根据要求详细说明。

Bor*_*aMa 5

最有可能的是,ruby在您的 python 脚本中与ruby在您的 shell 中不同。如果您安装了默认的系统 ruby​​(例如从系统包中),并且您通过 RVM 安装了另一个 ruby​​ 版本,则可能会发生这种情况。

使用 shell 时,RVM 会自动从 shell init 脚本(例如~/.bashrc)加载它的环境,并从其设置中知道要使用哪个 ruby​​。而您的 python 脚本不加载任何 rvm 环境(它不是登录 shell)并调用默认系统 ruby​​。

在这种情况下,您需要在 Python 脚本中从 RVM 显式调用正确的 ruby​​。您可以通过调用 RVM 包装器来实现它:

  • 浏览目录~/.rvm/wrappers/并找到您要使用的正确 ruby​​ 版本和 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")
Run Code Online (Sandbox Code Playgroud)

这应该可以解决您的问题。