我正在尝试写入已启动进程的stdin,该进程已经在运行。在进程启动时写入sdtin可以工作:
- 外部脚本1.sh:*
#!/bin/sh
echo "Started at $(date)"
read a
echo "$(date): got '$a'"
字符串
- 插件代码:*
ProcStarter proc = launcher.launch().stderr(listener.getLogger()).stdout(listener.getLogger()).cmds("/tmp/1.sh");
ByteArrayInputStream res = new ByteArrayInputStream(("hellooo" + System.lineSeparator()).getBytes(StandardCharsets.UTF_8));
proc.stdin(res).join();
型
- 在jenkins控制台中输出,与开始时间相同的时间戳并写入sdtin:*
$ /tmp/1.sh
Started at Thu Apr 2 10:52:02 CEST 2020
Thu Apr 2 10:52:02 CEST 2020: got 'hellooo'
型
我不想在开始时写入sdtin,而是在x秒后,类似于下面的伪代码:
ProcStarter proc = launcher.launch().stderr(listener.getLogger()).stdout(listener.getLogger()).cmds("/tmp/1.sh");
proc.join(); //blocks
//somewhere in another Thread:
Thread.sleep(15000);//pseudocode ;-)
ByteArrayInputStream res = new ByteArrayInputStream(("hellooo" + System.lineSeparator()).getBytes(StandardCharsets.UTF_8));
proc.stdin(res); // doesn't work
型
使用哈德逊.Launcher.ProcStarter是必要的,因为要在Jenkins代理上执行。有没有什么想法,我如何才能写入已经运行的进程的stdin?
1条答案
按热度按时间xeufq47z1#
我得到了解决方案,重要的是调用proc.writeStdin()方法,它反转了I/O方向:
字符串