无法让Gradle使用System.in

时间:2016-10-25 18:04:58

标签: gradle inputstream blocking system.in

This question说明了在运行任务以在项目中运行特定类时如何使用System.in

但对我来说,目前它不起作用:虽然我在application中添加了build.gradle插件和以下几行:

mainClassName = "misc.StreamsExp"
run{ 
    standardInput = System.in 
}
task stream( type: JavaExec, dependsOn: assemble ){
    classpath sourceSets.main.runtimeClasspath
    main = "misc.StreamsExp"
}

以下应用代码中readLine的行应该是阻止但不是:

BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));

String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
    System.out.println( "spuds");
    enteredLine = br.readLine();
}

......而是永远旋转的东西:

  

土豆
  土豆
  土豆
  ...

注意我在使用Java 8.91的Windows 10操作系统上。我已经尝试过Windows DOS控制台和Cygwin NB2当我在Eclipse(Gradle STS Eclipse插件)中运行这个stream任务时会发生同样的事情......但是当我执行Run as --> Java application时却没有:然后阻塞按预期发生。

1 个答案:

答案 0 :(得分:1)

哈......其中一个坐在你认为你会被永远难倒的地方,你找到解决方案2分钟后发布到SO!我会留在这里给其他人......

答案是将行import pandas as pd import pandas.io.data as web import matplotlib.pyplot as plt from matplotlib import style style.use('ggplot') import datetime start = datetime.datetime(2000, 10, 23) end = datetime.datetime(2016, 10, 23) df = web.DataReader("BAC", "yahoo", start, end) df['100MA'] = pd.rolling_mean(df['Adj Close'], 100, min_periods=1) df['STD'] = pd.rolling_std(df['Close'], 25, min_periods=1) print(df.tail()) f,axarr = plt.subplots(2,1) df[['Adj Close', '100MA']].plot(ax=axarr[0]) df['STD'].plot(ax=axarr[1]) plt.show() 放在您正在运行的任务中,如下所示:

standardInput =

奇怪的是,在Windows DOS终端中通过

跟随提示“spuds”
  

>建筑物88%> :流

...这是我引用的问题中提到的已知“bug”。在Cygwin中,这个错误不会发生。

CAVEAT:这适用于Windows DOS终端和Cygwin终端......在Eclipse中运行定制task stream( type: JavaExec, dependsOn: assemble ){ standardInput = System.in classpath sourceSets.main.runtimeClasspath main = "misc.StreamsExp" } 任务时, NOT 解决问题!