提问人:styvane 提问时间:12/19/2014 最后编辑:ouflakstyvane 更新时间:8/11/2015 访问量:120429
为什么找不到导入命令?[复制]
Why can't the import command be found? [duplicate]
问:
我正在使用模块中的函数通过以下方式接受脚本,或者这是最小的脚本: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
答:
64赞
Thomas Orozco
12/19/2014
#1
您需要告诉您的操作系统这是一个 Python 程序,否则,它将被解释为 shell 脚本(找不到该命令)。import
正如你所确定的,这是通过使用 shebang 线来完成的:
#!/usr/bin/env python3
仅当您要像这样运行脚本时才需要这样做: ,它告诉您的操作系统“运行此可执行文件”。这样做需要您的操作系统确定它应该如何运行程序,并且它依赖于 shebang 行(除其他外)。./script.py
但是,如果您运行(我猜您这样做),那么 Python 不会询问您的操作系统是否是 Python 程序,因此 shebang 行无关紧要。python script.py
fruit.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 进程,脚本不会接收任何参数 ,等等。-c
python3
sys.argv
评论
python finput.py