我尝试使用以下代码。但是腻子正在发射和关闭imidiatlly。 in command.txt包含ls -lrt代码。
Runtime r = Runtime.getRuntime();
//Runtime r2 = Runtime.getRuntime();
Process p = null;
//Process p2 = null;
String s = "D:\\Nandan\\putty.exe -ssh -l ***** -pw ******** XX.XX.XX.XX -m D:\\Nandan\\command.txtx";
//String s2 = "ls -lrt";
try
{
p = r.exec(s);
p.waitFor();
} catch (Exception e)
{
System.out.println("Exception error :"+e.getMessage());
e.printStackTrace();
}
答案 0 :(得分:3)
Putty是ssh客户端,所以你不用调用putty就可以直接使用java ssh库JSch.jar来执行linux机器上的任何操作。下面是相同的示例代码
Session session = new JSch().getSession(user, hostName, 22);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand("some command here");
String result = IOUtils.toString(channel.getInputStream());
channel.disconnect();
session.disconnect();
要了解详情,请浏览http://www.jcraft.com/jsch/examples/
链接答案 1 :(得分:0)
我成功做到了这样
private static void printResult(InputStream input, Channel channel) throws Exception {
int SIZE = 1024;
byte[] tmp = new byte[SIZE];
while (true) {
while (input.available() > 0) {
int i = input.read(tmp, 0, SIZE);
if (i < 0)
break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
try {
Thread.sleep(300);
} catch (Exception ee) {
}
}
}
关于功能 printResult
import tkinter as tk
from Adafruit_IO import Client, Feed, RequestError
ADAFRUIT_IO_USERNAME = "**********"
ADAFRUIT_IO_KEY = "***************"
aio = Client(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
try:
temperature = aio.feeds('temperature')
except RequestError:
feed = Feed(name="temperature")
temperature = aio.create_feed(feed)
class Timer:
def __init__(self, parent):
self.temp = 25
self.label = tk.Label(text="--,- °C", font="Arial 30", width=10)
self.label.pack()
self.label.after(5000, self.sendtemp)
def sendtemp(self):
aio.send_data(temperature.key,self.temp)
data = aio.receive(temperature.key)
print(data.value)
self.label.configure(text="%i°C" % self.temp)
self.temp +=1
self.label.after(5000, self.sendtemp)
if __name__ == "__main__":
window = tk.Tk()
window.title ("Thermometer")
window.geometry("300x100")
timer = Timer(window)
window.mainloop()
答案 2 :(得分:0)
解决代码问题,这是问题的一部分。
Putty 的-m
选项指示服务器启动文件中存在的命令而不是 shell,以便在命令完成后会话关闭。为了使 putty 会话具有交互性,我们需要添加 -t
选项,并且在作为输入提供给 -m 选项的文件中,我们需要添加“/bin/bash”作为最后一个命令。
putty.exe -ssh -l username -pw NextGenCne password -m D:\test.txt -t
D:\test.txt 文件内容如下。
cd /home/username/mydirectory
/bin/bash
所以完整的程序将如下所示。
Runtime r = Runtime.getRuntime();
//Runtime r2 = Runtime.getRuntime();
Process p = null;
//Process p2 = null;
String s = "D:\\Nandan\\putty.exe -ssh -l ***** -pw ******** XX.XX.XX.XX -m D:\\Nandan\\command.txtx -t";
//String s2 = "ls -lrt";
try
{
p = r.exec(s);
p.waitFor();
} catch (Exception e)
{
System.out.println("Exception error :"+e.getMessage());
e.printStackTrace();
}
注意:如果目的是从java代码中以某种方式打开putty终端,那么上面的方法是可以的,如果目的只是在服务器上执行一些命令并捕获输出,那么就去上面已经提到的JSch答案。