2014-09-18 4 views
3

В командной строке UNIX я могу сделать:Python подпроцесс и входной оболочки Перенаправление

paste <(echo A) <(echo B) 

Однако, когда я пытаюсь сделать это:

import subprocess 
subprocess.call('paste <(echo A) <(echo B)', shell = True) 

Я получаю эту ошибку:

/bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `paste <(echo A) <(echo B)' 

Невозможно выполнить перенаправление ввода оболочки с помощью модуля подпроцесса?

+5

Это, вероятно, работает '/ bin/sh' как ваша оболочка, которая этого не делает. Вам нужно попытаться заставить его использовать '/ bin/bash'. –

+1

Спасибо, Etan! Я добавил исполняемый файл = '/ bin/bash', и он сработал! Вы оставите ответ? –

+0

вы дали ** os.system ('paste <(echo A) <(echo B)') ** попробовать ..? – Olu

ответ

1

Многие вещи по умолчанию используют /bin/sh как оболочку по выбору. /bin/sh часто не bash.

/bin/sh в вашей системе, скорее всего, не поддерживает замену процесса.

Указать subprocess.call использовать /bin/bash как оболочку вместо этого, и она должна работать.

+0

Еще раз спасибо. Это сделал трюк: subprocess.call ('paste <(echo A) <(echo B)', shell = True, executable = '/ bin/bash') –

+1

@ tommy.carstensen: even '/ bin/bash' if вызываемый с использованием имени '/ bin/sh' может использовать другой режим совместимости, т. е. никаких подстановок процесса. – jfs

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