Как считывать данные из разветвленных процессов в Haskell?

#haskell #process #system

#haskell #процесс #система

Вопрос:

кто может привести мне короткий пример, где я вызываю некоторую системную команду, а затем считываю ее с помощью haskell и, например, печатаю ее?

я знаю, что могу использовать System.Cmd для выполнения системных команд, таких как: nm, ls, mkdir и т.д.

но мне не нужно вызывать только их, мне также нужно прочитать это и выполнить некоторые операции с прочитанной строкой

Ответ №1:

Ключевой библиотекой для использования является process пакет, который предоставляет System.Процесс.

Вызвать команду и получить ее вывод:

 readProcess
      :: FilePath   -- command to run
      -> [String]   -- any arguments
      -> String         -- standard input
      -> IO String  -- stdout
  

Вот так:

 import System.Process

main = do
    s <- readProcess "/bin/date" [] []
    putStrLn $ "The date is "    s
  

который выполняется как:

 The date is Fri Apr 29 09:29:29 PDT 2011
  

Ответ №2:

Система.Процесс имеет именно те функции, которые вам нужны readProcess .

 main = do
  wcOut <- readProcess "wc" ["/usr/share/dict"] []
  let numLines = read (head (words wcOut)) :: Int
  if numLines > 10 then return () else print "That's a small dictionary."