Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Linux и командная строка 
:(
    Опции темы
zss
Дата 16.2.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



под Linux есть приложение, которое работает через командную строку.

Команды и результаты выводятся на консоль.
Нужно создать графическое приложение, которое может выдавать команды на консоль и читать с нее результаты.

Можно ли это сделать ? Если да, то как ?
PM MAIL ICQ   Вверх
Alexandr87
Дата 16.2.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Можно.
Код

Process p=Runtime.getRuntime().exec("/bin/myprogram");
InputStream os=p.getInputStream();
InputStream es=p.getErrorStream()
OuputStream is=p.getOutputStream()

Ps. Не совсем понятно - "на консоль". Этот пример, читает стандартные потоки программы. Скорее всего так и будет работать, если он не использует файл консольного устройства.

Это сообщение отредактировал(а) Alexandr87 - 16.2.2006, 11:25
PM Jabber   Вверх
LSD
Дата 16.2.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Для начала, прочти FAQ 1 и 2.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
zss
Дата 16.2.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



LSD, мне нужно немного не то


я в Linux полный валенок smile

если из командной строки, то нужно инициализировать hci

тоесть
Код

hciconfig ...
hci scan...


и в ответ на консоль вываливается список устройств

так вот мне надо этот результат получить из графического приложения

тоесть перенаправить вывод не на консоль а в свой поток
или может еще как



Это сообщение отредактировал(а) zss - 16.2.2006, 16:23
PM MAIL ICQ   Вверх
Alexandr87
Дата 16.2.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



То, что я предложил пробовал?
PM Jabber   Вверх
LSD
Дата 16.2.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(zss @ 16.2.2006, 15:06)
если из командной строки, то нужно инициализировать hci

тоесть
Код

hciconfig ...
hci scan...


и в ответ на консоль вываливается список устройств

так вот мне надо этот результат получить из графического приложения

тоесть перенаправить вывод не на консоль а в свой поток
или может еще как

Так Alexandr87 тебе предложил: получаешь поток ввода приложения и поток вывода. Чтобы выполнить hci scan пишешь в поток вывода строку hci scan и читаешь затем из потока вывода список устройств.

Если не разберешься сам, напиши и я в выходные накидаю примерчик.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
zss
Дата 16.2.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



спасибо всем - попробую

проблемма в том, что я не знаю что такое hci в Linux (поэтому и вопрос)

а если он автоматически запускается при старте системы ?


LCD - буду очень признателен, если набросаешь smile
PM MAIL ICQ   Вверх
LSD
Дата 16.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(zss @ 16.2.2006, 18:03 Найти цитируемый пост)
проблемма в том, что я не знаю что такое hci в Linux (поэтому и вопрос)

а если он автоматически запускается при старте системы ?

Если проблема в hci, то это не сюда, это к линуксоидам в раздел. Я например тоже не знаю, что такое hci.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
zss
Дата 17.2.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



LSD, все равно надеюсь на примерчик smile

а с hci - буду разбираться
PM MAIL ICQ   Вверх
zss
Дата 19.2.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



я так понимаю что мне достаточно послать команду просто на
системную консоль, а не для конкретного процесса

Как это можно сделать ?
PM MAIL ICQ   Вверх
zss
Дата 19.2.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Alexandr87, кстати ты получаешь InputStream

а можно его сразу перенаправить например в JTextArea ?
PM MAIL ICQ   Вверх
LSD
Дата 19.2.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Вот пример графической оболочки командного процессора:
Код
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class CmdTest extends JFrame
{
  private JTextArea textArea = new JTextArea(25, 80);
  private JTextField textField = new JTextField();
  private String newLine = System.getProperty("line.separator");
  private BufferedWriter writer;

  public CmdTest() throws IOException
  {
    super("Command processor");
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("cmd.exe");
    writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream(), "Cp866"));
    Streamer streamer = new Streamer(new InputStreamReader(process.getInputStream(), "Cp866"));
    streamer.start();
    streamer = new Streamer(new InputStreamReader(process.getErrorStream(), "Cp866"));
    streamer.start();

    textField.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        execCommand(textField.getText());
        textField.setText("");
      }
    });
    getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER);
    getContentPane().add(textField, BorderLayout.SOUTH);
    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
  }

  private void execCommand(String command)
  {
    try
    {
      writer.write(command);
      writer.write(newLine);
      writer.flush();
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    try
    {
      CmdTest cmdTest = new CmdTest();
      cmdTest.setVisible(true);
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  }

  private class Streamer extends Thread
  {
    private Reader reader;

    public Streamer(Reader reader)
    {
      super("Streamer");
      this.reader = reader;
    }

    public void run()
    {
      try
      {
        char[] buffer = new char[1024];
        int read;
        while((read = reader.read(buffer)) != -1)
        {
          textArea.append(new String(buffer, 0, read));
          textArea.setCaretPosition(textArea.getDocument().getLength());
        }
      }
      catch(IOException e)
      {
        e.printStackTrace();
      }
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
zss
Дата 19.2.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



LSD, большое спасибо
PM MAIL ICQ   Вверх
zss
Дата 24.2.2006, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



LSD, скажи пожалуйста, а можно выводить InputStreamReader только когда это нужно, а не всегда.

З.Ы. И еще как быстро разобрать InputStreamReader, мне нужно получить
определенные поля. У меня по команде выводится

Scanning ...
00:11:22:33:44:55 n/a
...
PM MAIL ICQ   Вверх
LSD
Дата 24.2.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(zss @ 24.2.2006, 21:25 Найти цитируемый пост)
а можно выводить InputStreamReader только когда это нужно, а не всегда

Можно, только вопрос когда нужно, а когда нет.

Цитата(zss @ 24.2.2006, 21:25 Найти цитируемый пост)
З.Ы. И еще как быстро разобрать InputStreamReader, мне нужно получить
определенные поля. У меня по команде выводится

java.util.regex


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.