繁体   English   中英

从Java调用时,bash脚本不等待命令完成

[英]bash script not waiting for completion of commands when called from java

我正在运行以下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中的输入流读取回显数据。

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脚本中执行类似的操作

通过使用start ,您要求在后台启动批处理文件。

调用Process#waitFor()

如有必要,使当前线程等待,直到此Process对象表示的Process终止。

您还将获得子流程的退出值。 如果成功码0 ,或non-zero ,如果错误退出code`。

export PATH=usr/local/bin/scrapy:$PATH
export PATH=/usr/local/bin:$PATH 

@RealSkeptic,将导出路径添加到脚本文件解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM