我想从Dr内或命令行启动n个子进程(即,我想完全在Dr ide内或完全从命令行运行代码)。
然后,这些进程将通过stdin和stdout交换消息。
是否可以通过修改以下代码,从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)))发布于 2016-02-27 01:28:04
不知道这是否是你想要的,但是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只是集成开发环境的名称。球拍是语言的名称。
https://stackoverflow.com/questions/35657108
复制相似问题