我使用input
模块中的fileinput
函数通过pipes
或input 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 :(得分:33)
您需要告诉您的操作系统这是一个Python程序,否则,它被解释为shell脚本(无法找到import
命令)。
如您所知,这是通过使用shebang线来完成的:
#!/usr/bin/env python3
只有在你要运行这样的脚本时才需要这样做:./script.py
,告诉你的操作系统“运行这个可执行文件”。这样做需要您的操作系统识别它应该如何运行程序,并且它依赖于shebang线(除其他外)。
但是如果你运行python script.py
(我猜你是为fruit.py
做的那样),那么Python不会问你的操作系统是否是Python程序,所以shebang line doesn'无所谓。