2014-12-19 82 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