代码之家  ›  专栏  ›  技术社区  ›  0fnt

使用python-c开关的长程序

  •  4
  • 0fnt  · 技术社区  · 15 年前

    我想用python做我用bash做的事情。是否可以将-c开关用于长程序,例如带两个语句的for循环?这将允许我直接从命令行使用Python,就像bash或php一样。

    谢谢。

    编辑:不知道我怎么会错过它,只需做一个python-c’,然后按enter就可以完成我想做的。我试过很多变种,其中一种用了A,但没用,所以我问了这个问题。 例如

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

    做我想做的,尽管罗德的回答看起来也不错。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Alex Martelli    15 年前

    如果底层shell是bash,则没有问题,因为如果打开了 ' (引号)尚未结束--例如:

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

    这个 > 是bash的默认值 PS2 “多行继续提示”,区别于 $ 阿卡 PS1 ,正常的“开始输入命令”提示。

    如果不能使用这样的多行继续符,则使用多个嵌套的块语句(例如 if 在一个循环中)否则可能是有问题的。

        2
  •  5
  •   Rod    15 年前

    可以使用复合语句,使用分号分隔语句,例如

    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
  •  3
  •   loevborg    15 年前

    当在脚本中使用时,我认为最好让Python从标准输入中读取脚本,如下所示:

    #!/bin/bash
    
    python - arg1 arg2 <<END
    import sys
    print 'Arg:', sys.argv[1:]
    END
    

    这使用bash的 HEREDOC 语法。

        4
  •  1
  •   zdav    15 年前

    如果从bash脚本运行,只需使用引号:

    #!/bin/sh
    
    python -c 'import os
    for i in range(3):
        for j in range(3):
            print i*j
    '
    
    echo "done"
    

    否则,如果使用命令行,则使用 ; 分号分隔语句,或再次使用单引号换行到下一行:

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