在python解释器-c命令中使用条件

在python解释器-c命令中使用条件,python,command-line,conditional,Python,Command Line,Conditional,我试图找出如何将以下条件语句传递到python解释器的命令选项(-c)中 但是,我不断地遇到语法错误,例如: >python -c "import sys; if sys.maxsize > 2**32: print '64' else: print '32';" File "<string>", line 1 import sys; if sys.maxsize > 2**32: print '64' else: print '32';

我试图找出如何将以下条件语句传递到python解释器的命令选项(-c)中

但是,我不断地遇到语法错误,例如:

>python -c "import sys; if sys.maxsize > 2**32: print '64' else: print '32';"
  File "<string>", line 1
    import sys; if sys.maxsize > 2**32: print '64' else: print '32';
                 ^
SyntaxError: invalid syntax
>python-c“导入sys;if sys.maxsize>2**32:print'64'其他:print'32'
文件“”,第1行
导入系统;如果sys.maxsize>2**32:打印'64'否则:打印'32';
^
SyntaxError:无效语法
我发现很难找到这种用法的好例子。我肯定错过了一些重要的东西…

经过(非常)简短的搜索,我在任何地方都找不到记录在案的内容,但似乎
-c
严格地采用了表达式(即,可以出现在作业右侧的内容),而不是语句。在您的案例中,要解决这个问题,您需要做两件事:

  • 使用(函数调用是表达式)而不是print语句
  • 如果b或者c,则使用Python的
    a
  • 这将为您提供:

    lvc@tiamat:~$ python -c "from __future__ import print_function; import sys; print('64' if sys.maxsize > 2**32 else '32')"
    64
    

    可以使用多行(至少在bash中):

    要获取所有平台信息,您可以:

    $ python -mplatform
    
    或者只是一个架构:

    $ python -c "import platform; print platform.architecture()"
    ('64bit', 'ELF')
    

    现有的两个答案更好,但这里有一个替代方案(使用Python 2.7测试):


    另请参见:

    我想你的意思是“32”,但这很好。那个么,语句和表达式是等价的吗?在Python文档中:
    当使用-c命令调用时,它将执行作为命令给出的Python语句。此处,该命令可能包含多个由换行符分隔的语句。在Python语句中,前导空格非常重要@DevHopeful_2012我的意思是
    其他'32'
    ;现在修好了。手册页的这一部分似乎在说,
    -c
    接受你能在解释器提示下输入的任何东西,这与我实际看到的东西不符语句”是Python中“表达式”的超集-参见,例如。但正如我在回答中所说的,将“表达式”视为“可以在
    =
    的RHS上放置的任何东西”。对于体系结构,您是否仍然需要注意OSX,在OSX中,解释器可以作为不同的比特运行?我对细节不太清楚,但我看到一些评论说platform.architecture()不可信。它是一个
    sys.maxsize
    似乎是一个有效的解决方法(我不知道是否有python工作的系统,但是
    sizeof size\u t!=sizeof pointer
    )。嗯,我想它看起来更像这样。我相信您的回答同样优雅,我的要求只适用于Python2.7或更高版本。所以,这肯定也会起作用。然而,lvc击败了你,澄清了我的误解。无论如何谢谢你的帮助!
    $ python -mplatform
    
    $ python -c "import platform; print platform.architecture()"
    ('64bit', 'ELF')
    
    > python -c 'import sys; print 64 if sys.maxsize > 2**32 else 32'
    64