Size: a a a

Сообщество Scheme

2021 March 15

AT

Andrew Tropin in Сообщество Scheme
A ß
а что ты делаешь? насколько я знаю она используется в гиксе
пишу модуль для guix home для управления стейтом. Чтобы можно было написать herd init state и все рабочие репы подтянулись на свои места, если их там не было до этого.
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Andrew Tropin
Как в guile запустить синхронно процесс, чтобы вывод летел в мой стдаут? при (system ) вывод теряется.
Попробуй кстати заменить stdout на другой файловый дескриптор просто.
источник

AP

Artyom "avp&quo... in Сообщество Scheme
источник

AP

Artyom "avp&quo... in Сообщество Scheme
источник

AP

Artyom "avp&quo... in Сообщество Scheme
with-output-to-port, например.  Или же просто заменить файловый дескриптор выходного потока через dup2 или может быть redirect-port на нужный тебе, а потом запустить процесс через system (предположу, так как system работает через fork/exec, то он получит дескрипторы от родителя "по наследству".)
источник

AP

Artyom "avp&quo... in Сообщество Scheme
И тогда дочерний процесс будет сразу писать туда, куда тебе надо.
источник

AT

Andrew Tropin in Сообщество Scheme
Artyom "avp" Poptsov
with-output-to-port, например.  Или же просто заменить файловый дескриптор выходного потока через dup2 или может быть redirect-port на нужный тебе, а потом запустить процесс через system (предположу, так как system работает через fork/exec, то он получит дескрипторы от родителя "по наследству".)
Типа так?
   (with-output-to-port (current-output-port)
    (lambda () (system "ls")))
источник

AT

Andrew Tropin in Сообщество Scheme
Andrew Tropin
Ага, смотрю. Пока сделал так:
   (let ((port ((@@ (ice-9 popen) open-input-pipe) "ls && sleep 5s")))
    (waitpid WAIT_ANY)
    (display ((@@ (ice-9 rdelim) read-delimited) "" port))
    ((@@ (ice-9 popen) close-pipe) port))
я вообще не очень понимаю, куда девается вывод от system. и почему вот это работает, а system - нет.
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Пробуй.
источник

AT

Andrew Tropin in Сообщество Scheme
что пробовать?)
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Andrew Tropin
Типа так?
   (with-output-to-port (current-output-port)
    (lambda () (system "ls")))
Работает?
источник

AT

Andrew Tropin in Сообщество Scheme
Artyom "avp" Poptsov
Работает?
не-а
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Через часа три смогу ещё посмотреть детально, может даже написать пример.
источник

AT

Andrew Tropin in Сообщество Scheme
Artyom "avp" Poptsov
Через часа три смогу ещё посмотреть детально, может даже написать пример.
Спасибо. Я пока ковыряю варианты, если что-то более-менее вменяемое получится, то отпишусь
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Andrew Tropin
Как в guile запустить синхронно процесс, чтобы вывод летел в мой стдаут? при (system ) вывод теряется.
Тут кстати вывод не "теряется", насколько вижу.  Вот простой пример:
#!/usr/bin/guile \
-e main -s
!#

(define (main args)
 (system "ls"))


Запуск и вывод:
$ ./system-to-stdout.scm 
system-to-stdout.scm


Просто вывод идёт в stdout процесса, который был запущен system.
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Вот этот пример пишет вывод команды "ls" в файл:
#!/usr/bin/guile \
-e main -s
!#

(define (main args)
 (let ((port (open-output-file "out.txt")))
   (dup2 (port->fdes port) 1)
   (system "ls")))
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Тоже самое, но через primitive-fork:
#!/usr/bin/guile \
-e main -s
!#

(define (main args)
 (let ((port (open-output-file "out.txt")))
   (dup2 (port->fdes port) 1)
   (let ((pid (primitive-fork)))
     (cond
      ((zero? pid)
       (execl "/usr/bin/ls" "ls"))))))
источник

AT

Andrew Tropin in Сообщество Scheme
Artyom "avp" Poptsov
Тут кстати вывод не "теряется", насколько вижу.  Вот простой пример:
#!/usr/bin/guile \
-e main -s
!#

(define (main args)
 (system "ls"))


Запуск и вывод:
$ ./system-to-stdout.scm 
system-to-stdout.scm


Просто вывод идёт в stdout процесса, который был запущен system.
у меня код выполняется внутри шеферд сервиса. т.е. я дёргаю herd'ом какой-то экшн, а этот экшн выполняется в shepherd и вероятно мне через сокет в stdout herd'а прилетает текст.
источник
2021 March 17

1

10100111001💾 in Сообщество Scheme
всем здрасти
источник

1

10100111001💾 in Сообщество Scheme
недавно начал учить  Racket, попробовал реализовать Алгоритм Евклида (нахождение НОД), как его можно улучшить?

(define (nod x y)
 (if (or ( = x 0)(= y 0))
     (max x y)
     (let
         ([mx (max x y)]
          [mn (min x y)])
       (nod  (remainder mx mn) mn))))
источник