gpt4 book ai didi

command-line - 在 Racket 中启动子流程

转载 作者:行者123 更新时间:2023-12-04 04:48:06 24 4
gpt4 key购买 nike

我想从 Dr Racket 或命令行启动 n 个子进程(即我想完全在 Dr Racket ide 或完全从命令行运行代码)。

然后这些进程将通过标准输入和标准输出交换消息。

是否可以通过修改以下从 cmd 行启动它们的代码来实现? (或者根本不可能?请注意,我是方案初学者)

(struct proc (stdout stdin))

(define (start-program p)
(define-values (s stdout stdin stderr) (subprocess #f #f #f p))
(thread (lambda () (copy-port stderr (current-error-port))))
(proc stdout stdin))

(define programs (vector->list (current-command-line-arguments)))

(map start-program programs)

(define (send-to proc v)
(write v (proc-stdin proc))
(flush-output (proc-stdin proc)))

(define (receive-from proc)
(read (proc-stdout proc)))

最佳答案

不确定这是否是您想要的,但是 current-command-line-arguments 是一个参数,因此您可以使用 parameterize 设置它。

这是在当前目录中生成文件的代码改编版:

#lang racket
(struct proc (stdout stdin))

(define (start-program p)
(define-values (s stdout stdin stderr) (subprocess #f #f #f p))
(thread (lambda () (copy-port stderr (current-error-port))))
(proc stdout stdin))

(define (send-to proc v)
(write v (proc-stdin proc))
(flush-output (proc-stdin proc)))

(define (receive-from proc)
(read (proc-stdout proc)))

(parameterize ([current-command-line-arguments (vector "ls")])
(define programs
(map find-executable-path (vector->list (current-command-line-arguments))))
(define running-programs
(map start-program programs))
(let loop ([x (receive-from (first running-programs))])
(displayln x)
(unless (eof-object? x)
(loop (receive-from (first running-programs))))))

顺便说一句,DrRacket 只是 IDE 的名称。 Racket 是语言的名称。

关于command-line - 在 Racket 中启动子流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35657108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com