为什么找不到导入命令?[复制]

Why can't the import command be found? [duplicate]

提问人:styvane 提问时间:12/19/2014 最后编辑:ouflakstyvane 更新时间:8/11/2015 访问量:120429

问:

我正在使用模块中的函数通过以下方式接受脚本,或者这是最小的脚本:inputfileinputpipesinput file

finput.py

import fileinput

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

使这个脚本可执行后,我运行并得到ls | ./finput.pyunexpected 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

但这个问题似乎只与模块有关。由于以下脚本在没有 :fileinputshebang

fruit.py

import random

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

现在我错过了什么?为什么找不到该命令,因为 中不需要importshebangfinput.py

蟒蛇 舍邦

评论

0赞 anilbey 2/8/2018
您也可以通过以下方式运行它:python finput.py

答:

64赞 Thomas Orozco 12/19/2014 #1

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

正如你所确定的,这是通过使用 shebang 线来完成的:

#!/usr/bin/env python3

仅当您要像这样运行脚本时才需要这样做: ,它告诉您的操作系统“运行此可执行文件”。这样做需要您的操作系统确定它应该如何运行程序,并且它依赖于 shebang 行(除其他外)。./script.py

但是,如果您运行(我猜您这样做),那么 Python 不会询问您的操作系统是否是 Python 程序,因此 shebang 行无关紧要。python script.pyfruit.py

评论

2赞 holdenweb 12/19/2014
另外请记住,您需要使文件可执行
0赞 Ben Slade 5/7/2020
将“python3”参数传递给 env 脚本会告诉 env 在路径中找到的任何地方运行 python3,对吧?因此,这避免了对 python3 可执行文件的路径进行硬编码?你也可以使用 #!/usr/bin/bash -c python3 吗?
1赞 Warbo 7/30/2021
@BenSlade 不幸的是,许多系统只支持 #!行,所以两者都给,而且不可靠。此外,这将创建一个单独的 bash 进程,脚本不会接收任何参数 ,等等。-cpython3sys.argv