Long programs using python -c switch

2019-02-14 08:31发布

I would like to use python for things I've been doing using bash. Is it possible to use the -c switch for long programs, e.g. a for loop with two statements? This would let me use python directly from command line, just like bash or php.

Thanks.

EDIT: Don't know how I missed it, simply doing a python -c ' and then pressing enter does what I've wanted to do. I'd tried a lot of variations, and one using a \ but that didn't work, so I asked the question. e.g.

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

does what I wanted to do, though Rod's answer looks good too.

4条回答
不美不萌又怎样
2楼-- · 2019-02-14 09:11

If you are running from a bash script, just use quotes:

#!/bin/sh

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

echo "done"

Otherwise, if using the cmd line, use ; semicolons to seperate statements, or use single quotes again to wrap around to the next line:

python -c 'import os
>    for i in range(3):
>        for j in range(3):
>            print i*j
>    '
查看更多
再贱就再见
3楼-- · 2019-02-14 09:19

No problem if your underlying shell is bash, since you can continue an argument across multiple lines if an opened ' (quote) is not yet closed -- e.g.:

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

The > is bash's default PS2, the "multi-line continuation prompt", as distinguished from $, AKA PS1, the normal "start entering a command" prompt.

If you can't use such multi-line continuation, multiple nested block statements (such as an if within a loop) could otherwise be problematic.

查看更多
看我几分像从前
4楼-- · 2019-02-14 09:27

When used inside a script, I think it would be better to have python read the script from standard input, like so:

#!/bin/bash

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

This uses bash's HEREDOC syntax.

查看更多
爷、活的狠高调
5楼-- · 2019-02-14 09:31

You can use compound statements, using the semi-colon to delimiter the statements, such as

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

Then output would then be:

0
0
1
1
2
2

see http://docs.python.org/reference/compound_stmts.html

查看更多
登录 后发表回答