【问题标题】:Casper Python Script Failing with `/usr/bin/python` But Not `python`Casper Python 脚本因`/usr/bin/python` 而失败,但不是`python`
【发布时间】:2014-07-18 11:48:22
【问题描述】:

当我运行python deamon.py 时,测试套件运行正常;但是,当我使用 /usr/bin/python 运行它时,它会抛出 Casper.waitfor() 超时警告,因为它显然无法读取 DOM 元素。

// Fails:
/usr/bin/python  /path_to_deals/deals/deamon.py

// Succeeds:
python  /path_to_deals/deals/deamon.py

目录结构如下:

交易/

 deamon.py
 test.js

deamon.py 是在test.js 文件中启动casperjs 测试套件的脚本。

谁能解释为什么python 有效但/usr/bin/python 无效——以及我该如何解决这个问题?

讨论更新:“当我执行 python deamon.py 时,只有当我将它放入 Cron 时它才会失败(我必须在其中指定确切的 python 路径和脚本路径)。”

【问题讨论】:

  • 您确定/usr/bin/pythonpython 引用的是同一个Python 版本吗?
  • 可以看到which python使用的Python版本
  • 是的,它们是一样的。事实上,我只有一个 python 版本,即 python2.7
  • 出于好奇,如果你改用/usr/bin/env python,它也会失败吗?
  • (也许是一个非常相关的 AskUbuntu 帖子:askubuntu.com/questions/372672/…

标签: python cron casperjs


【解决方案1】:

正如Arcege 解释here“Cron 对你的 shell 一无所知;它是由系统启动的,所以它有一个最小的环境。如果你想要什么,你需要自己带上它。”

很可能,在 您的 会话中设置的某些变量被 Cron 遗忘了。以下是三个选项:

1.) 您可以为特定命令设置环境变量,就像Nischalhere 一样。

要点:

* * * * * . $HOME/.profile; python /path/to/myScript.py

2.) 为整个 Crontab 设置环境变量,就像 here 一样。

要点:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * *   python /path/to/myScript.py

More 关于在 Cron 中设置环境变量。)


3.) 在脚本本身中设置环境变量。 Python 的urllib2 显然需要http_proxy 变量,所以如果你使用它,你可能会遇到问题。您可以使用 os 来设置它 (source) 或者 - 可能会更好 - 您可以指定 urllib2 应该使用的代理,因为 ZelluX 使用 here 执行 ProxyHandler

要点:

proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com')

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2010-11-13
    • 2012-09-21
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多