2014-12-19 84 views
7

我用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命令,因为shebang不是需要finput.py

+0

你也可以这样运行: 'python finput.py' – anilbey 2018-02-08 10:12:26

回答

22

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

#!/usr/bin/env python3 

此,如果你要像这样运行脚本时,才需要:./script.py,它告诉你的OS“运行

像你确定,这是通过使用一个家当线完成此可执行文件“。这样做需要您的操作系统识别它应该如何运行该程序,并且依赖于该(除其他之外)shebang行。

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

+1

也请记住你需要使文件可执行 – holdenweb 2014-12-19 10:41:07

相关问题