【问题标题】:Shell-Script Python call fails with Syntax ErrorShell-Script Python 调用失败并出现语法错误
【发布时间】:2017-06-04 11:15:43
【问题描述】:

我目前正在准备一个 shell 脚本,作为其功能的一部分,它必须执行一些 Python 调用。

PY_OP=$(python -c 'import my_package as mp; print mp.some_operation()')

但是,当我在 bash 中调用我的 shell 脚本时,我只收到一个非常奇怪的语法错误:

$ ./my_script.sh
File "<string>", line 1
import my_package as mp; print mp.some_operation()
      ^
SyntaxError: invalid syntax

有趣的是,如果我只是从 bash 中执行 python -c ... 命令,则不会发生此错误。

作为补充信息,我可以说以下内容:

  • 我正在使用virtualenv 来包含所有pip 已安装的软件包。
  • 我使用的Python版本是2.7.12
  • 我的操作系统是elementaryOS 0.4.1(不过完全基于Ubuntu 16.04)

任何关于我做错了什么的建议或提示将不胜感激。

【问题讨论】:

  • 我得到这三行:Traceback (most recent call last):File "&lt;string&gt;", line 1, in &lt;module&gt;ImportError: No module named my_package
  • 检查您的文件是否有特殊字符:cat -A file.shcat -v file.sh
  • @Cyrus 感谢您的提示。 cat -A file.sh 已经成功了。当我运行它时,import 语句实际上看起来像这样importM-BM- my_packageM-BM- asM-BM- mp。尽管这些字符在普通编辑器中是不可见的,但这显然是导致脚本失败的原因。如果您只是将评论复制到答案中,我很乐意接受它作为正确的解决方案。

标签: bash python-2.7 shell ubuntu virtualenv


【解决方案1】:

根据@Cyrus 在回答最初的问题时给出的cmets,我能够使用cat -A {file-name}.sh 命令解决问题。

在文件上执行它揭示了以下内容:

  • 期待:import my_package as mp
  • 现实:importM-BM- my_packageM-BM- asM-BM- mp

不幸的是,这些M-BM- 在 Atom 或 Sublime 等普通编辑器中不可见,但在执行 sh 文件时似乎会产生影响。这也解释了错误点的奇怪位置,它指向一个空白(实际上看起来是一些特殊的、不可见的字符)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多