【问题标题】:for loop in Python called from bash [duplicate]从bash调用的Python中的for循环[重复]
【发布时间】:2015-08-24 11:09:15
【问题描述】:

我正在直接从 bash 执行 Python (2.6.6) 命令,如下所示:

bash-4.1$ python -c "for i in range(4) : print('a')"

哪个输出

a
a
a
a

但是,当我在 for 循环之前添加一些内容时,我得到一个 SyntaxError:

bash-4.1$ python -c "myChar = 'a'; for i in range(4) : print(myChar)"
  File "<string>", line 1
    myChar = 'a'; for i in range(4) : print(myChar)
                    ^
SyntaxError: invalid syntax

不管我在分号前放了什么。不过,

bash-4.1$ python -c "i = 1; print i"

工作得很好。

知道这里发生了什么吗?

【问题讨论】:

  • Python 有大量空白,您不能使用; 将任意语句放在一起。这就像问为什么用分号替换一些花括号时为什么 C sn-p 无法工作。
  • 要让你的命令生效,你可以这样做python -c $'myChar=\'a\'\nfor i in range(4): print(myChar)'
  • @Songy Phew,太丑了。
  • 见鬼,但它完成了工作;P
  • 使用丑陋的“完成工作”不在Zen of Python:“美丽胜于丑陋。”

标签: python bash for-loop


【解决方案1】:

如果您想在 shell 脚本中编写 Python 代码,请使用 here document

$ python3.4 <<EOF
myChar = 'a'
for i in range(4):
    print(myChar)
EOF 

输出:

a
a
a
a

阅读 PEP 0008PEP 0020 了解 Python 风格。

【讨论】:

  • 这是“这里的文档”,而不是“这里的字符串”。这里的字符串是python &lt;&lt;&lt;"...",但您也不需要它。只需使用带有换行符的常规字符串:python -c "mychar = 'a'&lt;return&gt;for i ... "。这里的文档(不是这里的字符串或直接字符串)的优点是不需要转义引号等,但您通常希望通过使用 &lt;&lt;"EOF" 来禁用变量扩展
猜你喜欢
  • 2019-04-09
  • 2020-10-18
  • 1970-01-01
  • 2020-01-06
  • 2021-03-02
  • 2016-10-04
  • 2011-08-09
  • 2019-01-08
  • 2011-10-11
相关资源
最近更新 更多