How to read the output of jsch command in Android?
我正在使用JSCH库构建一个android应用,以在远程linux服务器中执行命令,然后读取其输出。
我遵循了这个问题的答案,但是并没有解决我的问题。
以下是我的活动代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | package com.example.pic_controller_2; import android.graphics.drawable.Drawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.app.Activity; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.ChannelSftp; import android.view.View; import android.os.AsyncTask; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class TestActivity extends AppCompatActivity { private String aaaa; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } public void show_picture_func (View v) { new AsyncTask<Integer, Void, Void>(){ @Override protected Void doInBackground(Integer... params) { String SFTPHOST ="192.168.0.1"; int SFTPPORT = 22; String SFTPUSER ="pi"; String SFTPPASS ="raspberry"; String SFTPWORKINGDIR ="/home/pi/pic/"; Session session = null; Channel channel = null; ChannelSftp channelSftp = null; try { JSch jsch = new JSch(); session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT); session.setPassword(SFTPPASS); session.setConfig("StrictHostKeyChecking","no"); session.setTimeout(10000); session.connect(); ChannelExec channel1 = (ChannelExec)session.openChannel("exec"); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); channel1.setOutputStream(baos); channel1.setCommand("ls /home/pi/pic | sed -n 5p"); aaaa = new String(baos.toByteArray()); } catch (Exception ex) { ex.printStackTrace(); Toast.makeText(getApplicationContext(),"Error Connecting", Toast.LENGTH_LONG).show(); } return null; } @Override protected void onPostExecute(Void unused) { TextView textView1_2 = (TextView)findViewById(R.id.textView1); textView1_2.setText(aaaa); } }.execute(1); } } |
因此,已执行命令的输出应出现在textview中。 但事实并非如此。 文本视图变为白色!
有什么建议么 !?
我从此更改了代码的以下部分:
1 2 3 4 5 | ChannelExec channel1 = (ChannelExec)session.openChannel("exec"); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); channel1.setOutputStream(baos); channel1.setCommand("ls /home/pi/pic | sed -n 5p"); aaaa = new String(baos.toByteArray()); |
对此:
1 2 3 4 5 6 7 | ChannelExec channel1 = (ChannelExec)session.openChannel("exec"); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); channel1.setOutputStream(baos); channel1.setCommand("ls /home/pi/pic | sed -n 5p | xargs echo -n"); channel1.connect(); try{Thread.sleep(1000);}catch(Exception ee){} aaaa = new String(baos.toByteArray()); |
问题解决了。