调用子进程和函数式编程

时间:2017-01-18 00:40:24

标签: python functional-programming mutability

是否可以避免副作用并仍然创建子进程?例如:

from subprocess import call

def ls(directory):
    return call("ls %s" % directory, shell=True)

如果不可能,功能语言如何进行此类操作?

感谢。

1 个答案:

答案 0 :(得分:0)

在函数式语言中创建子进程并执行任何给定的操作不是纯函数,它有副作用

在函数式语言中,还有不纯的函数,但它会尝试最小化不纯函数中的代码,并使函数不明确。您可以阅读IO monads

考虑到 Haskell 是最具功能性的语言,它明确表示它对createProcess函数的签名/声明有副作用

createProcess :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)

IO 明确表示它有副作用

如果你只是需要避免外出,你可以这样做

import os
import subprocess

FNULL = open(os.devnull, 'w')

def ls(directory):
    return subprocess.call(['ls',directory], stdout=FNULL, stderr=FNULL)