我正在运行以下bash脚本
scrapy crawl flipkart -a key="$1" -o "$2"flipkart.xml
scrapy crawl myntra -a key="$1" -o "$2"myntra.xml
scrapy crawl jabong -a key="$1" -o "$2"jabong.xml
echo " scrapy completed"
通过终端执行时的bash脚本正在按预期运行,因为它完成了scrapy命令的一次执行然后另一次执行,但是当我尝试通过java调用它时,相同的脚本不执行scrapy命令。 它执行shell脚本,因为我能够通过java中的输入流读取echo数据。
String command = "/Users/renny/Documents/WorkSpaces/Scrapy/tutorial/tutorial/crawls.sh";
String[] cmd = new String[]{"/bin/sh", command,key,formattedDate};
//Process p = Runtime.getRuntime().exec(cmd);
ProcessBuilder p = new ProcessBuilder(cmd);
Process p2 = p.start();
InputStream error = p2.getErrorStream();
for (int i = 0; i < error.available(); i++) {
System.out.println("" + error.read());
}
BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line;
System.out.println("Output of running " + command + " is: ");
请建议我如何确保执行scrapy命令。
在一个批处理文件中,我认为我们可以调用start以确保命令在单独的提示中运行,我可以在bash脚本中执行类似操作
答案 0 :(得分:0)
使用start
,您要求在后台启动批处理文件。
如果需要,导致当前线程等待,直到此
Process
对象表示的进程终止。
此外,您将获得子进程的退出值。如果成功编码0
,或non-zero
如果错误退出代码`。
答案 1 :(得分:0)
export PATH=usr/local/bin/scrapy:$PATH
export PATH=/usr/local/bin:$PATH
将导出路径添加到脚本文件解决了问题,感谢@RealSkeptic。