Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47

Работа с cmd/bash из программы

30.11.2016, 19:39. Показов 4233. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я полный дуб в С++, поэтому не понимаю того, что пишут по этой теме. А вопрос в общем-то боянистый.

Мне нужно запустить bat/sh скрипт из программы, затем посмотреть результаты работы этого скрипта (текст, который в процессе работы скрипта появится в консоли).

Например, скрипт run.sh:
Bash
1
2
3
4
5
#!/bin/bash 
param1=$1
param2=$2
sleep 5
echo "End. $param1 $param2"
(А вообще мне нужно поработать с командой "ps ax")

Я знаю, что запуск скрипта можно сделать через System(). А вот как результаты получать?
В принципе меня устроит вместо запуска скрипта через System() посылать в консоль по одной команде, если так получение фидбека проще.

Желательно маленький работающий пример.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2016, 19:39
Ответы с готовыми решениями:

Работа программы без окна, cmd
возможно ли написать программу, при работе которой не видно окна windows или cmd? Почему даже если главный класс реализует лишь icloneable,...

Переделать из cmd в bash
Всем добрый день! Подскажите пожалуйста, как в bash реализовать след. цикл(написанный в cmd): setlocal enabledelayedexpansion ...

Переделать скрипт из CMD/BAT в BASH
Всем доброго дня! Есть BAT del /f /q c:\sza\zsv del /f /q c:\sza\zpr del /f /q c:\sza\zsp del /f /q c:\sza\zco del /f...

13
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.11.2016, 19:48
popen() изучай.
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
30.11.2016, 19:53
Ortaz, О перенаправлении вывода слыхал? Типа ">"
Ну и popen(), конечно.
И раздвоение потока (не помню, как называется)
В общем, рекомендация проста -
1
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47
30.11.2016, 20:05  [ТС]
Спасибо за ответы.
Но нет чтоб пример на 10 строк наваять >_<
__
О перенаправлении вывода - неа.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
30.11.2016, 20:17
Открываешь как обычный файл, только вместо имени - команда запуска с параметрами. Затем читаешь fgets().
1
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47
01.12.2016, 13:24  [ТС]
popen() я так понял для линукса? А для винды?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.12.2016, 14:02
У тебя же Linux, вот и пользуйся.
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.12.2016, 14:07
Цитата Сообщение от Ortaz Посмотреть сообщение
А для винды?
Юзай Qt. там кроссплатформенно.
1
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47
01.12.2016, 16:10  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
У тебя же Linux, вот и пользуйся.
Под линуксом я с ps ax буду работать, под виндой немного другое, но в целом нужно, чтоб и там и там работало
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.12.2016, 16:41
Лучший ответ Сообщение было отмечено Ortaz как решение

Решение

Может пригодится.
C++
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
86
87
88
89
90
91
/////////////////////////////////////////////////////////////////////////////////////////
#ifndef SYSTEM_LOADER_HPP
#define SYSTEM_LOADER_HPP
/////////////////////////////////////////////////////////////////////////////////////////
#include <cstdlib>
#include <string>
#include <vector>
#include <fstream>
/////////////////////////////////////////////////////////////////////////////////////////
namespace tools
{
/////////////////////////////////////////////////////////////////////////////////////////
inline void trim_string( std::string& str )
{
    while( std::isspace(str.front()) )
        str = str.substr(1);
    while( std::isspace(str.back()) )
        str = str.substr(0, str.size() - 1);
}
/////////////////////////////////////////////////////////////////////////////////////////
class System_loader
{
    //-------------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------------
    using container_t = std::vector<std::string>;
    //-------------------------------------------------------------------------------
    static const container_t& system( const char* cmd )
    {
        return system( std::string{ cmd } );
    }
    //-------------------------------------------------------------------------------
    static const container_t& system( std::string cmd )
    {
        size_t idx = cmd.find( '>' );
        if( idx == std::string::npos )
        {
            cmd += "> tmp.txt";
            file_name = "tmp.txt";
        }
        else
        {
            file_name = cmd.substr(idx + 1);
            trim_string(file_name);
        }
        
        std::system(cmd.c_str());
        
        std::ifstream f_in( file_name );
        
        std::string tmp{};
        while( std::getline(f_in, tmp) )
        {
            if( !tmp.empty() )
            {
                container.push_back(tmp);
            }
        }
        
        return container;
    }
    //-------------------------------------------------------------------------------
private:
    //-------------------------------------------------------------------------------
    System_loader() = delete;
    ~System_loader() = delete;
    //-------------------------------------------------------------------------------
    static std::string file_name;
    static container_t container;
    //-------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
std::string System_loader::file_name = std::string{};
System_loader::container_t System_loader::container = {};
/////////////////////////////////////////////////////////////////////////////////////////
} //tools
/////////////////////////////////////////////////////////////////////////////////////////
#endif //SYSTEM_LOADER_HPP
/////////////////////////////////////////////////////////////////////////////////////////
//example
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    auto example = tools::System_loader::system( "dir > tmp2.txt" );
    
    for( const auto& it : example )
    {
        std::cout << it << "\n";
    }
}
1
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47
01.12.2016, 18:49  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
Может пригодится.
Спасибо большое!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.12.2016, 19:32
Ortaz, в теме ты пишешь про bash, а после откуда-то Windows появляется. там WinAPI надо смотреть. Или делать через QProcess в Qt. Тема такая была, вывод ловили.
0
3 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 47
01.12.2016, 21:25  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Ortaz, в теме ты пишешь про bash, а после откуда-то Windows появляется.
Название темы "Работа с cmd/bash из программы". В первом посте речь идёт про скрипты bat и shell. В качестве примера привожу .sh.
Вам достаточно аргументов, свидетельствующих о том, что я не пишу только "про bash" и Windows появляется не из "откуда-то"?

Добавлено через 1 час 21 минуту
Цитата Сообщение от GbaLog- Посмотреть сообщение
Может пригодится.
Всё сработало, спасибо большое ещё раз.
Там ток "#include <cctype>" забыли
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.12.2016, 21:37
Цитата Сообщение от Ortaz Посмотреть сообщение
забыли
Хм... А у меня работает и так. Поэтому и забыл, наверное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2016, 21:37
Помогаю со студенческими работами здесь

Объединение команд в одну строку; CMD & bash.exe
cd C:\tools\cygwin\bin\ &amp; bash.exe &amp; cd /cygdrive/c Первая команда переход в директорию к файлу bash.exe, вторая команда запуск...

Создать командный файл в CMD/Bash: в указанной папке удалится самый маленький txt-файл
Нужно создать командный файл, запустив который, в указаной папке удалится самый малеенький txt-файл. Прошу помочь.:cry:

Работа с mysql в bash
В чем суть проблемы, мне нужно через bash (shell script) выполнить выборку данных. Просто если выполнять mysql -u root -p то мы переходим...

Работа со строками Bash
Дорогие форумчане, возникла резкая необходимость. В этих делах не в зуб ногой. Файл с содержимым показывает вызов функции mail() в...

Исправить ошибки в скрипте Bash для программы С на LINUX
Всем привет, нужно исправить ошибки в Bash скрипте для программы, записывающей значения матриц в файл.Программа запускается с вводом 4...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru