我试图从我的本地立交API获取OSM数据。有四个步骤来获取OSM数据。java给字符串运行进程exe
- 运行的二进制文件
/srv/osm3s/bin/osm3s_query
- 一旦osm3s_query运行时,你会看到这条消息
encoding remark: Please enter your query and terminate it with CTRL+D.
- 输入查询
<query type="node"><bbox-query n="51.0" s="50.9" w="6.9" e="7.0"/><has-kv k="amenity" v="pub"/></query><print/>
- 按CTRL +d并获得OSM结果
我的代码如下:
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("/srv/osm3s/bin/osm3s_query");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
在显示消息encoding remark: Please enter your query and terminate it with CTRL+D.
后,该过程将在步骤2中挂起。我不知道如何为查询字符串提供进程。
有人有一些想法吗?
你有进程的输入流。你也可以得到输出流。 – Moira
您应该向输出流写入您的查询。 – minus
根据'Process'的Javadoc:“从1.5开始,ProcessBuilder.start()是创建Process的首选方法。” – slim