我用Python 3编写了一个脚本,并将其存储在路径上的Tools/文件夹中。这个文件(在本文中称为example.py(读取本地inputfile.yml。我可以使用找到该文件
which example.py
我已经使用验证了python3的安装和路径
which python3
我现在正试图从linux命令行运行以下命令:
python3 example.py inputfile.yml
我也试过:
example.py inputfile.yml
如何运行非本地但在路径上的python脚本?
要运行脚本,python需要找到它(它在PATH上,所以你在那里很好(,它需要是可执行的(774对用户和组都很好(并且linux需要知道如何执行它;shebang";。如果文件顶部看起来像
#!somepath someparams
linux将尝试使用someparams和脚本的路径在somepath上执行程序。所以,
#/bin/sh
使用系统外壳运行程序。
#/usr/bin/python3
在该位置使用python运行程序。可以使用env
程序将程序与绝对路径解耦。据此,env
将在路径上搜索称为";蟒蛇3";并使用它。env
究竟驻留在哪里还有待商榷。它通常在/bin和/usr/bin中。
#!/usr/bin/env python3
或
#/bin/env python3
在Unix系统(包括Linux(上执行此操作的正常方法是使Python文件可执行,并将正确的Python路径放在第一行中,如下所示:
#!/usr/bin/python3
(或者Python安装的正确路径——使用which python3
进行检查(。
请确保该文件是可执行的。然后您可以直接从命令行调用它:
example.py inputfile.yml
Python3将根据.py
文件第一行中给出的路径自动调用。
正如tdelaney所指出的,你可以交替使用:
#!/usr/bin/env python3
如果您想从用户的路径中获取python3
,而不是显式地给出路径。这是否更可取取决于你的需求。
但从您的评论中,听起来错误消息是在抱怨找不到python3r
。这意味着该行以返回字符(r
,即^M
(结束。这强烈表明它是一个DOS文件。DOS文件使用一对字符来结束行rn
。只需将其转换为非DOS文件,使该行以n
结尾,不包含r
字符。这将解决你的问题。