Команда отлично работает при запуске непосредственно из bash. Тем не менее, внутри сценария, я получаю:
sh: -c: line0: syntax error near unexpected token `('
Это потому, что внутри скрипта, вы запускаете команду с sh
, а не bash
. И эта команда, и более простая, используют bash
-специальные функции. Попробуйте запустить оболочку sh
и введите те же строки, и вы получите ту же ошибку.
os.system вызов не документ, что оболочка использует, потому что:
посредством вызова функции Standard C system()
На большинстве Unix-подобных систем, это вызывает sh
. Вы, вероятно, не должны полагаться на это ... но вы определенно не должны полагаться на него, звоня по телефону bash
!
Если вы хотите запустить bash
команды, используйте subprocess
модуль и запустить bash
явно:
subprocess.call(['bash', '-c', 'paste <(cat file1) > output_file'])
Вы могли бы, я полагаю, попытаться получить квотирование право запускать bash
как субоболочке внутри оболочки system
использует ... но зачем беспокоиться?
Это одна из многих причин, по которой в документации неоднократно указывается, что вы должны использовать subprocess
вместо os.system
.
Похоже, что ваша оболочка по умолчанию - 'sh', а не' bash'. И обе ваши командные строки недействительны с помощью 'sh'. – abarnert
@MartijnPieters: Он не использует 'subprocess', он использует' os.system'. Который в Unix-системах просто вызывает функцию libc 'system', которая использует ... ну, это зависит от вашей ОС, и мы не знаем, какую ОС использует OP. – abarnert
@abarnert: верно, действительно; виноват. Затем я укажу на ['man system'] (http://linux.die.net/man/3/system), в котором говорится, что он использует'/bin/sh -c'. –