Главная

Запуск скрипта, перенаправление вывода.

Подскажите способ запустить внешний скрипт, так чтобы результат его вывода можно было перенаправить в файл(строку и т.п.)

Re(2):Запуск скрипта, перенаправление вывода.

А вот это не подоёдёт?

MyScript >> ~/output.txt

Если ничего не напутал, то в файле /boot/home/output.txt будет результат вывода скрипта MyScript.

Re(3):Запуск скрипта, перенаправление вывода.

должно быть одиночная стрелка >.

Re(4):Запуск скрипта, перенаправление вывода.

А вот и нет….
Одиночная перенаправляет вывод в файл,
Двойная дописывает вывод в конец файла…
Это posix стандарт… работает по идее везде, даже в досе…

Re(5):Запуск скрипта, перенаправление вывода.

Вы не совсем меня поняли…
Скрипт нужно запустить из программы.
Т.е. нечно вроде
be_roster–>Launch(
или
system(

И хотелось бы это перенаправить так чтобы не было временного файла. И получать либо через cin, stdin или через BMessage.

Re(9):Запуск скрипта, перенаправление вывода - код:

filedes[2], filedes2[2]; // pipes descriptors

pipe(filedes); //creating pipe

if ((ps_id_cat=fork())==0) // implementing fork and checking that we are in child process
{
dup2(filedes[0],fileno ( stdin)); // if in child — replacing stdin with pipe
pipe(filedes2);
if ((ps_id_smpeg=fork())==0) // implementing fork and checking that we are in child process
{
dup2(filedes2[0],fileno ( stdin));
atexit(bye);
execvp(«smpeg», argsmpeg); //calling cat and smpeg — it seems that with 'cat' occurs weirdnes — sometimes it works
exit(1) ; //sometimes dont
}
else
{
dup2(filedes2[1],fileno ( stdout));
atexit(bye);
execlp(«cat», “cat”, NULL);
exit(1);
}
}
else
dup2(filedes[1],fileno ( stdout)); //if in parent — replace stdout with pipe

Что тут делается. — VCDplay читает с диска файл, обрабатывает — направляет якобы в стандартный выход, на самом деле в трубу (pipe).
Это тебе еще не очень интересно.
Дальше, чтобы обойти некие глюки BeOS, вместо того чтобы направить трубу напрямую на стандартный вход программы smpeg, запускается шелловская команда “cat”
и ее стандартный вход соединяется со стандартных выходом vcdolay, а стандартный выход — со стандартных входом программы smpeg.

Так что кроме перечисленных тебе надо еще посмотреть
man fork.

Re(10):Запуск скрипта, перенаправление вывода - код:

да, впереди еще была декларация
int ps_id_cat, ps_id_smpeg, mpg_arg_cnt;

Re(11):Запуск скрипта, перенаправление вывода - код:

Понятно. Сам я сделал это через popen.

char buffer[512];
in = popen(«script»,"r");
while( fgets(buffer,512,in) )
printf("%s",buffer);
pclose(in);

Всем привет помогите

Всем привет помогите плиз с моей трабл, немогу разобраться в чес дело
я пытаюсь перенаправить вывод данных с программы исполняемой в execlp
но в буфер однозначно ничего не выводит, никак не могу понять почему
вот исходник может есть соображения :

#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
pid_t pid;
pid_t pido;
int pip[2];
char buffer[255] = “empty”;
int status,died;
switch(fork())
{
case -1 :
printf("%s","Error fork \n");
return EXIT_FAILURE;
case 0:
printf("%s","Run pid OMStip\n");
pipe(pip);
close(0);
dup2(pip[1],1);
close(pip[0]);
close(0);
pid = execlp(«/local/mms-v20/lib/linux_v9/OMStip»,"OMStip","T75","–done","wan0",0);
read(pid,buffer,255);
close(pid);
close(pip[0]);
close(pip[1]);
_exit(pip[1]);
}
printf(«out : \n»);
printf("%s\n",buffer);
close(0);
close(pip[0]);
close(pip[1]);
close(pid);
return EXIT_SUCCESS;
}

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
D
L
X
H
6
b
Enter the code without spaces and pay attention to upper/lower case.