调用子进程和函数式编程
Calling child process and functional programming
是否可以避免副作用并仍然创建子进程?示例:
from subprocess import call
def ls(directory):
return call("ls %s" % directory, shell=True)
如果不可能,函数式语言如何进行此类操作?
谢谢。
在函数式语言中,创建子进程并做任何类似给定的事情都不是纯函数,它有副作用
在函数式语言中也有不纯函数,但它会尽量减少不纯函数中的代码,并使函数不纯这一事实显式化。您可能会阅读 IO monads
例如,考虑到 Haskell 是最实用的语言,它明确表示它对其 signature/declaration 对于 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)
是否可以避免副作用并仍然创建子进程?示例:
from subprocess import call
def ls(directory):
return call("ls %s" % directory, shell=True)
如果不可能,函数式语言如何进行此类操作?
谢谢。
在函数式语言中,创建子进程并做任何类似给定的事情都不是纯函数,它有副作用
在函数式语言中也有不纯函数,但它会尽量减少不纯函数中的代码,并使函数不纯这一事实显式化。您可能会阅读 IO monads
例如,考虑到 Haskell 是最实用的语言,它明确表示它对其 signature/declaration 对于 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)