为什么找不到导入命令?

sty*_*ane 9 python shebang

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

finput.py

import fileinput

with fileinput.input() as f:
    for line in f:
        print(line)
Run Code Online (Sandbox Code Playgroud)

使这个脚本可执行后,我运行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:'
Run Code Online (Sandbox Code Playgroud)

我找到的唯一修复是在#!/usr/bin/env/python3import语句之前添加的时候.

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

fruit.py

import random

fruits = ["mango", "ananas", "apple"]
print(random.choice(fruits))
Run Code Online (Sandbox Code Playgroud)

现在我错过了什么?为什么不能import,因为该命令可以找到shebang不是必需finput.py

Tho*_*zco 37

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

就像你确定的那样,这是通过使用shebang线来完成的:

#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)

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

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

  • 另外请记住,您需要使文件可执行 (2认同)