我正在尝试在Java创建一个小程序,它将允许我访问远程Unix服务器,运行一些命令,然后在IDE中显示这些命令的输出。
我一直在拼凑一些代码,并试图学习它是如何工作的,这可能并不理想!
目前,我能够从控制台运行命令,并且能够在服务器上看到结果,但是我无法将输出发送回控制台。 每当我试图将它们作为字符串发送回来时,我都会得到类似java.lang.unixprocess$processpipeInputStream@9x57d1ad的内容,而不是我在服务器上看到的通常输出。 我肯定我做错了一些明显的事情,但是我是一个初学者,尽管花了几个小时去寻找,我还是没有找到一个解决方案。 我真的很感激你的帮助。 谢啦!
正在服务器上运行:
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
if (inputLine.equals("storage")) {
runStorage();
printResults(runStorage()); }
catch (Exception e) {
e.printStackTrace();
}
public static Process runStorage() throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("df", "-h");
Process process = processBuilder.start();
printResults(process);
return process;
}
public static String printResults(Process process) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
return line; }
客户:
public class ClientInitiator {
public static void main(String[] args) throws IOException, InterruptedException {
String hostName = "myHostNameGoesHere";
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn =
new BufferedReader(
new InputStreamReader(System.in));
{
String userInput;
while (!(userInput = stdIn.readLine()).equals("")) {
out.println(userInput);
if (userInput.equals("storage")) {
String serverResponse = in.readLine();
System.out.println(serverResponse);}
为了获取正在运行的进程的输出,请尝试以下代码。
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
我使用JSCH-SSH库在“shell”通道中执行命令,但无法找到一种方法来做两件事:- 1)如何查找命令是否在远程unix box上完全执行? 2)如何在String中捕获命令输出,而不是在System.out控制台上打印? 下面是我的代码片段,它可以很好地在系统上显示shell命令输出。出来 注意:我不想使用“exec”通道,因为它为每个命令启动一个新进程,并且不记得导出的“session”变
问题内容: 在python中,我可以使用os或subprocess运行一些系统命令。问题是我无法以字符串形式获取输出。例如: 我有一个没有功能check_out的较旧版本的子流程,并且我希望有一个不需要更新该模块的解决方案,因为我的代码将在没有完全管理员权限的服务器上运行。 这个问题似乎微不足道,但我找不到微不足道的解决方案 问题答案: 用途: 执行此操作的较新方法(> python 2.6)是使
问题内容: 在对包含多个单词的字符串字段进行排序时,Elasticsearch会拆分字符串值,并使用min或max作为排序值。IE:按升序对值为“老虎眼”的字段进行排序时,排序值为:“眼”,而按降序进行排序时,值为:“老虎”。 假设我在索引中输入了“老虎之眼”和“死亡之轮”,当我对该字段进行升序排序时,我希望“老虎之眼”是第一个,因为“ E”在“ W”之前,但我在该字段上进行排序时看到的是“死亡轮
问题内容: 我正在尝试从JAVA控制台程序中运行cmd命令,例如: 然后将命令的输出返回到JAVA中的字符串中,例如输出: 问题答案: 您可以为此使用以下代码
问题内容: 我正在调用通过管道连接的命令行程序。所有这些肯定可以在Linux上运行。 我的方法: 如果我打电话给 猫文件| grep asd,我得到了预期的结果。但是,并非所有命令都能正常工作。例如: 或这个: 该方法将返回null。我猜想这个问题取决于输出格式化命令,例如 head , tail , wc 等。我如何解决这个问题并获得输出的最终结果? 问题答案: 仍然没有找到使用Runtime.
我正在使用Google Cloud Shell中的命令。我正在遵循的教程以及留档(https://cloud.google.com/sdk/gcloud/reference/compute/zones/list)指出,要以表格形式列出所有区域,您应该使用以下命令: 当我运行它时,结果不会列在表格中,而是如下所示: 这是一个全新的原始Google Cloud帐户。Google是否更改了命令的默认输出
我在下面有一个函数,它的目的是返回第一个索引,其中数据不是按升序排序的。如果对数据进行排序,它将只返回数组的长度。例如,{10,20,90,5,70}将返回3(90 测试用例:
问题内容: Java中有没有一种方法可以从以下数学表达式获得结果: 另一方面,解析算术表达式的最佳方法是什么? 问题答案: 你可以将其传递给如下所示: 你将要确保评估的字符串来自受信任的来源,并采取通常的预防措施,否则,它将立即起作用。 如果你想采用更复杂(但更安全)的方法,则可以使用ANTLR(我怀疑这是一个数学语法的起点),然后实际自己编译/解释该语句。