2017-01-18 14 views
0

Можно ли избежать побочных эффектов и по-прежнему создавать дочерний процесс? Пример:Вызов дочернего процесса и функциональное программирование

from subprocess import call 

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

Если невозможно, как функциональные языки выполняют такие операции?

Спасибо.

+0

Что вы хотите здесь как неизменное? –

+0

Извините, я сделал путаницу. Я обновил вопрос. –

+0

Побочным эффектом является печать содержимого каталога? –

ответ

0

В функциональных языках, создавая дочерние процессы и делать что-либо подобное приведенному не чистая функция имеет побочные эффекты

В функциональных языках есть нечистые функции Aswell но будет пытаться минимизировать код в функции нечистых и сделать тот факт, что функция нечеткая. Вы можете прочитать о 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) 
+0

Спасибо @Sarathasp, ваш ответ прояснит ситуацию. –

 Смежные вопросы

  • Нет связанных вопросов^_^