Длинные программы, использующие переключатель python -c

Я хотел бы использовать python для вещей, которые я использовал, используя bash. Можно ли использовать ключ -c для длинных программ, например. цикл for с двумя операторами? Это позволило бы мне использовать python непосредственно из командной строки, точно так же, как bash или php.

Спасибо.

РЕДАКТИРОВАТЬ: Не знаю, как я это пропустил, просто выполнив python -c ', а затем нажав enter делает то, что я хотел сделать. Я пробовал много вариаций, а один использовал \, но это не сработало, поэтому я задал вопрос. например.

$python -c '
>print "x"
>for i in range(3):
>   print "y" '

делает то, что я хотел сделать, хотя ответ Рода тоже выглядит хорошо.

Ответы

Ответ 1

Нет проблем, если ваша базовая оболочка bash, так как вы можете продолжить аргумент через несколько строк, если открытая ' (quote) еще не закрыта - например:

$ python -c'for x in range(3):
>   if x!=1:
>     print x'
0
2
$

> bash default PS2, "приглашение продолжения многострочного перевода", в отличие от $, AKA PS1, обычное приглашение "начать вводить команду".

Если вы не можете использовать такое многострочное продолжение, несколько вложенных операторов блока (например, if внутри цикла) могут быть проблематичными.

Ответ 2

Вы можете использовать составные инструкции, используя запятую для разграничения операторов, например

python -c "for x in range(0,3) : print x; print x

Тогда вывод будет следующим:

0
0
1
1
2
2

см. http://docs.python.org/reference/compound_stmts.html

Ответ 3

При использовании внутри script, я думаю, было бы лучше, если бы python прочитал script со стандартного ввода, например:

#!/bin/bash

python - arg1 arg2 <<END
import sys
print 'Arg:', sys.argv[1:]
END

В этом случае используется bash синтаксис HEREDOC.

Ответ 4

Если вы работаете с bash script, просто используйте кавычки:

#!/bin/sh

python -c 'import os
for i in range(3):
    for j in range(3):
        print i*j
'

echo "done"

В противном случае, если вы используете строку cmd, используйте ; точки с запятой для разделения операторов или снова используйте одинарные кавычки для переноса на следующую строку:

python -c 'import os
>    for i in range(3):
>        for j in range(3):
>            print i*j
>    '