Длинные программы, использующие переключатель 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
> '