【问题标题】:Multiline script in a python command line argumentpython命令行参数中的多行脚本
【发布时间】:2014-04-25 14:13:14
【问题描述】:

我正在尝试从 arch linux PKGBUILD 脚本中调用 python:

python -c "from module import func; func()"

func 引发异常,这是预期行为,但会导致脚本失败。 捕获这样的异常不起作用:

python -c "from module import func; try: func(); except ValueError: pass"

似乎没有办法将 try/except 语句放在一行中 (Python: try statement in a single line)。

是否有另一种方法可以忽略异常或 python 返回错误的事实? 不需要额外脚本或其他文件的解决方案将是最受欢迎的:)

【问题讨论】:

  • 这不是关于try/except,而是一般的多行;更正了标题:)
  • 你当然是对的。感谢您的编辑。

标签: python


【解决方案1】:

shell 中的字符串可以包含嵌入的换行符:

python -c 'from module import func
try:
  func()
except ValueError:
  pass
'

请注意,如果要运行的 Python 包含混合引号,这将带来挑战,这将需要一些扭曲来确保它们都被正确转义。在这种情况下,此处的文档将比 -c 选项更合适(尽管如果要运行的代码需要从标准输入中读取,这会带来其自身的问题。)

python << EOF
from module import func
try:
  func()
except ValueError:
  pass
EOF

【讨论】:

  • 确实,这行得通。让我觉得有点愚蠢......好吧.. +1 :)
【解决方案2】:

您也可以像这样输入要交互执行的脚本:

$ cat -- | python
<code here>
<code here>
<code here>
<press Ctrl-D>

Python 会运行你输入的内容,例如:

~$ cat -- | python
from module import func
try:
  func()
except ValueError:
  pass
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named module

【讨论】:

  • 这不是我需要的,但仍然很有趣。
  • 我已将示例更改为您的代码;也许这就是你所需要的。
  • cat 是不必要的。你可以做python &lt;&lt;-SCRIPT,使用heredoc。
  • @kojiro: 是的,但不是更短,所以逆逻辑也成立。
  • 这在 99.9% 的情况下很重要。
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 2021-10-21
  • 2012-05-26
  • 2021-02-04
  • 2013-03-03
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多