我有一个 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。我在这里已经脱离了我的联盟,我需要帮助。任何进一步的问题都可以根据要求详细说明。
最有可能的是,ruby在您的 python 脚本中与ruby在您的 shell 中不同。如果您安装了默认的系统 ruby(例如从系统包中),并且您通过 RVM 安装了另一个 ruby 版本,则可能会发生这种情况。
使用 shell 时,RVM 会自动从 shell init 脚本(例如~/.bashrc)加载它的环境,并从其设置中知道要使用哪个 ruby。而您的 python 脚本不加载任何 rvm 环境(它不是登录 shell)并调用默认系统 ruby。
在这种情况下,您需要在 Python 脚本中从 RVM 显式调用正确的 ruby。您可以通过调用 RVM 包装器来实现它:
~/.rvm/wrappers/并找到您要使用的正确 ruby 版本和 gemsetruby从这个包装器目录而不是普通的 `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)
这应该可以解决您的问题。