为什么找不到导入命令?

时间:2014-12-19 10:17:11

标签: python shebang

我使用input模块中的fileinput函数通过pipesinput file接受脚本这是最小脚本:

finput.py

import fileinput

with fileinput.input() as f:
    for line in f:
        print(line)

使此脚本可执行后,我运行ls | ./finput.py并获取unexpected error message

./finput.py: line 1: import: command not found
./finput.py: line 3: syntax error near unexpected token `('
./finput.py: line 3: `with fileinput.input() as f:'

我找到的唯一解决方法是在导入语句之前添加#!/usr/bin/env/python3

但是这个问题似乎只与fileinput模块有关。由于以下脚本在没有shebang的情况下运行良好:

fruit.py

import random

fruits = ["mango", "ananas", "apple"]
print(random.choice(fruits))

现在我错过了什么?为什么无法找到import命令,因为shebangfinput.py不是必需

1 个答案:

答案 0 :(得分:33)

您需要告诉您的操作系统这是一个Python程序,否则,它被解释为shell脚本(无法找到import命令)。

如您所知,这是通过使用shebang线来完成的:

#!/usr/bin/env python3

只有在你要运行这样的脚本时才需要这样做:./script.py,告诉你的操作系统“运行这个可执行文件”。这样做需要您的操作系统识别它应该如何运行程序,并且它依赖于shebang线(除其他外)。

但是如果你运行python script.py(我猜你是为fruit.py做的那样),那么Python不会问你的操作系统是否是Python程序,所以shebang line doesn'无所谓。