【问题标题】:Running Scrapy from bash (shell script)从 bash 运行 Scrapy(shell 脚本)
【发布时间】:2015-02-05 04:01:44
【问题描述】:

我用 Java 开发了一个 Web 应用程序,它使用 Scrapy 来获取一些数据。为此,我从 Java 调用了一个 shell 脚本:

 Process p = Runtime.getRuntime().exec("sh myPath/myScript.sh");
 p.waitFor();

其中包含

 #!/bin/bash

 cd mySpiderPath
 echo "We are going tu run scrapy"
 scrapy crawl mySpider
 echo "done!"

运行后,两个“echo”都会被打印出来,但是scrapy什么都不做。如果我从 shell 运行 myScript.sh,它会完美运行......我很困惑!

我可以做些什么来尝试调试这种奇怪的行为?

编辑

我已将 myScript.sh 更改为运行 python 版本而不是 scrapy 命令,但它不起作用......所以,结论是这不是一个“scrapy 问题”,而是在调用它时是一个 bash 脚本问题来自Java ...有什么想法吗? (如果我从 shell 执行 myScript.sh 就可以了)

 #!/bin/bash

 cd mySpiderPath
 echo "We are going tu run scrapy"
 python --version
 echo "done!"

【问题讨论】:

  • 你确定你的进程中定义了scrapy命令吗?也许将完整路径放入二进制文件或确保您的 PATH 变量包含该二进制文件的路径。您可能可以回显 $PATH,我不知道 scrapy,但是您可以尝试执行其他操作,例如 scrapy -version 或 scrapy -help
  • 我把scrapy crawl mySpider换成了scrapy version还是不行……好像不识别scrapy命令,但是提示有错误。如果我从 shell 执行scrapy version,它工作正常
  • 我已经按照你的建议编辑了我的问题@Mike
  • 我会在脚本中添加 echo $PATH 以查看 PATH 变量的样子。如果scrapy目录(在python中执行?)不在PATH中,则需要导出PATH变量以包含scrapy/python目录

标签: java bash shell scrapy


【解决方案1】:

尝试改变:

Process p = Runtime.getRuntime().exec("sh myPath/myScript.sh");

到:

Process p = Runtime.getRuntime().exec("bash myPath/myScript.sh");

这可能会使用/bin/bash 而不是/bin/sh 运行脚本,这通常指向更简单的shell。

【讨论】:

  • 我尝试了您的建议,但没有成功...谢谢。我会试试@Mike 的一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2012-11-22
  • 2013-02-14
  • 2020-09-26
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多