Python命令行参数中的多行脚本

1 投票
2 回答
885 浏览
提问于 2025-04-18 04: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语句)。

有没有其他方法可以忽略这个异常,或者说Python返回了一个错误?如果能找到不需要额外脚本或其他文件的解决方案,那就太好了 :)

2 个回答

0

你也可以像这样输入要执行的脚本:

$ 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
3

在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

撰写回答