如果我需要按顺序执行外部命令,那么最佳解决方案是什么?
例如,我有两个命令"make snapshot"和"backup snapshot".第二个命令在第一个完成之前无法启动.如果我有条不紊地将这两个命令粘贴在do语法中,它们会一个接一个地执行,还是我必须手动检查并确保第一个完成?
对于手动完成检查,是否足以使用"system"或rawSystem"并检查它们的退出代码?
我不完全理解"system"和"runCommand"函数之间的区别.有人可以向我澄清这一点.我只能看到它们返回不同的值:退出代码与进程句柄.还有其他差异吗?
我是否宁愿使用"runCommand"来完成上述序列?我是否需要在进程句柄上调用wait?
谢谢.
Rot*_*sor 11
我知道您正在使用System.Process模块来运行外部命令.这很好.
该模块包含阻塞和非阻塞IO操作.非阻塞的(如createProcess,runCommand)创建一个进程并立即返回其句柄,同时它仍在运行.阻塞的(比如readProcess,system)不返回任何句柄,而是在终止后返回运行进程的结果.
要确保进程已终止,您需要使用阻塞操作或使用阻塞,waitForProcess直到具有给定句柄的进程终止.
是否足以使用"system"或rawSystem"并检查他们的退出代码?
是.
"system"和"runCommand"函数之间的区别
主要区别在于system阻塞而runCommand不是.
我是否宁愿使用"runCommand"来完成上述序列?
不,在您的情况下,阻止呼叫应该足够了.
我是否需要在进程句柄上调用wait?
仅当您决定使用非阻塞呼叫时.
用法示例:
import System.Process
main = do
ExitSuccess <- system "make snapshot"
ExitSuccess <- system "backup snapshot"
return ()
Run Code Online (Sandbox Code Playgroud)