我有一个脚本,它多次执行一个程序,向 STDERR 和 STDOUT 生成大约 350 行输出。现在,我需要用 Java 执行脚本,从而将输出流打印到它们的原始目的地。因此,基本上,我从 Java 类内部执行脚本,为用户维护原始行为。
我这样做的方式受到了诸如从 java Runtime.exec 读取流之类的建议的启发,并且在功能上运行良好。
Process p = Runtime.getRuntime().exec(cmdarray);
new Thread(new ProcessInputStreamHandler(p.getInputStream(), System.out)).start();
new Thread(new ProcessInputStreamHandler(p.getErrorStream(), System.err)).start();
return p.waitFor();
Run Code Online (Sandbox Code Playgroud)
和班级ProcessInputStreamHandler:
class ProcessInputStreamHandler implements Runnable {
private BufferedReader in_reader;
private PrintStream out_stream;
public ProcessInputStreamHandler(final InputStream in_stream, final PrintStream out_stream) {
this.in_reader = new BufferedReader(new InputStreamReader(in_stream));
this.out_stream = out_stream;
}
@Override public void run() {
String line;
try {
while ((line = in_reader.readLine()) != null) {
out_stream.println(line);
} …Run Code Online (Sandbox Code Playgroud) 我有一个关于 Coq 中类型检查定义的问题。我遇到了这样一种情况,我有两个类型为 t1 和 t2 的项,从定义中我知道 t1 和 t2 相等 (t1 = t2)。但是,我不能一起使用这两个术语,因为类型检查器认为这些类型不相等。我试图隔离一个最小的示例来模拟情况(是的,我知道这是一个愚蠢的属性,但我只是希望它得到类型检查;)):
Require Import Coq.Lists.List.
Lemma myLemma :
forall t1 t2 : Type,
forall (l1 : list t1) (l2 : list t2),
t1 = t2 ->
l1 = l2.
Run Code Online (Sandbox Code Playgroud)
假设我不能(l2 : list t1)直接写,因为我从另一个定义中得到它。
我尝试使用,Program因为我希望我可以以某种方式推迟任务来证明类型匹配,但这没有帮助(得到相同的类型检查错误)。
如果上面的例子不足以让问题清楚,这里是我的实际问题的摘录:
Definition taclet_sound_new (t : taclet) :=
forall K st seSt, let S := (sig K) in
[(K, st)] |= (pathC seSt) ->
(forall K', let S' := (sig K') …Run Code Online (Sandbox Code Playgroud) 我正在与 KeY ( https://www.key-project.org )一起玩一个教学项目。
一方面,我很高兴 KeY 轻松证明了以下带 jml 注释的 Java 代码的正确性
/*@ ensures ((\result == a) || (\result == b));
@ ensures ((\result >= a) && (\result >= b));
*/
public int max(int a, int b) {
if(a <= b)
return b;
else
return a;
}
Run Code Online (Sandbox Code Playgroud)
但另一方面,令人惊讶的是,我无法证明以下等效程序的正确性
/*@ ensures ((\result == a) || (\result == b));
@ ensures ((\result >= a) && (\result >= b));
*/
public int max(int a, int b) {
return (a <= b) ? b …Run Code Online (Sandbox Code Playgroud)