我正在用Java编写一个程序,该程序需要使用终端命令才能工作。我的功能基本上看起来像这样:
public void sendLoginCommand() throws IOException
{
System.out.println("\n------------Sending Login Command------------\n");
String cmd="qskdjqhsdqsd";
Runtime rt = Runtime.getRuntime();
Process p=rt.exec(cmd);
}
public Process sendPassword(String password) throws IOException
{
System.out.println("\n------------Sending Password------------\n");
String cmd=password;
Runtime rt = Runtime.getRuntime();
Process p=rt.exec(cmd);
return p;
}
public void login(String password) throws IOException
{
sendLoginCommand();
Process p = sendPassword(password);
System.out.println("\n------------Reading Terminal Output------------\n");
Reader in = new InputStreamReader(p.getInputStream());
in = new BufferedReader(in);
char[] buffer = new char[20];
int len = in.read(buffer);
String s = new String(buffer, 0, len);
System.out.println(s);
if(s.equals("Password invalid.")) loggedIn=false;
else loggedIn=true;
}
在这里,程序正确发送了p4登录命令,但是随后,终端要求输入密码。当我使用与sendLoginCommand()相同的行时,程序将返回错误。显然,我们只能通过Process发送标准命令。我希望有人知道如何向终端发送普通字符串
先感谢您
我找到了我问题的答案。
问题在于终端的第二个响应实际上是在第一个响应中,而密码必须在中间发送。这是代码(我同意,我的解释有点含糊):
String s="";
Process p = Runtime.getRuntime().exec("p4 login");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
char a=(char)in.read();
while(a>0 && a<256)
{
a=(char)in.read();
if(nb==14) new PrintWriter(p.getOutputStream(),true).println(password);
if(nb>16) s=s+a;
nb++;
}
if(s.startsWith("User")) loggedIn=true;
else loggedIn=false;
我只需要"解除屏蔽"我的终端后...有一些选项或setpup为它? 注意:我的服务正在使用,因此假设不需要在命令行上使用。 PS:我需要保持容器运行,我不需要使用
笑话 出现问题的行位于//TODO中:
我正在建立一个应用程序,用户将把他们的测试和作业和任何东西。我想知道我的应用程序是否有可能在测试前一周和一天发出通知? 我看到的到处都是firebase通知和push通知。 我不想要这些在线通知,我将需要应用程序发送他们自己离线。这可能吗?
问题内容: 每次更新同一张图片时,图像质量都会通过图像压缩方法降低。 我不想一次又一次地压缩图像。请提出一些建议。 问题答案: 首先,使用PNG压缩不会丢失图像质量。 如果仍要获取不压缩的字节,则可以尝试以下操作: 要从字节数组取回:
问题内容: 每次更新同一张图片时,图像质量都会通过图像压缩方法降低。 我不想一次又一次地压缩图像。请提出一些建议。 问题答案: 首先,使用PNG压缩不会丢失图像质量。 如果仍要获取不压缩的字节,则可以尝试以下操作: 要从字节数组取回:
a 应该在内部使用类似于: 如何一个