有没有一种可移植的方法可以从shell运行python脚本而不编写其完整路径?
例如在Linux中,我希望在主目录中
cd ~
为了能够运行一个名为run.py的python脚本,也就是说,~/long/path/to/run.py,但是我想通过简单地键入
python run.py
而不是
python ~/long/path/to/run.py
我希望有一种搜索路径列表,它包含几个目录,就像path变量一样,这样python run.py在其中一个目录中运行它遇到的第一个run.py。
我曾考虑过将run.py转换为可执行文件,并将其目录添加到系统路径变量中,但找不到使python脚本可执行的可移植方法。
编辑
一年后,我问了这个问题之后,我就没那么傻了,我发现我的问题不是很清楚,也没有什么意义,所以在一个问题的投票后,我会澄清一些事情。
1)便携式。
当我问这个的时候,我说是便携式的。不过,在这种情况下,便携式的含义并不清楚,我也没有太多强调。
平台:应在POSIX(Linux、MacOS等)和Windows上工作
这仍然没有多大意义,因为windows使用cmd.exe
,POSIX使用sh
,所以每个人都可以用不同的语法运行命令。因此,假设最可移植的事情是将相同的输入同时提供给sh
和cmd.exe
,在这两种情况下都运行python脚本。在这种情况下,可以从ANSI Csystem
函数运行相同的命令,该函数在POSIX上使用sh
,在Windows上使用cmd
。ANSI C是Windows和POSIX中为数不多的几个共同点之一,这个问题在这种情况下有一定的意义。
2)可执行
接下来,短语turning run.py into an executable
不是很清楚。因此,我讨论的是Linux的策略chmod +x run.py
,添加一个shebang#!/usr/bin/env python
,并添加其目录system add~/long/path/to/path环境变量。但这对windows不起作用,因为windows不支持Linux这样的可执行文件元数据属性,而且/usr/bin/env不一定存在于windows中。
3)延伸
最后,在我的脑海中,我希望有一个解决方案,不指定运行的是哪种类型的文件,这样,如果有一天我们决定将其作为一个perl文件,任何接口都不会改变。
因此,写run.py
是不好的,因为它会指定文件类型;最好只写run
澄清编辑后回答
与@F.J.建议的方法相比,我更喜欢下面的方法,因为它不需要用户指定文件类型。请注意,原始问题中没有具体说明这一点,因此他对原始问题的回答是正确的。
让我们调用文件
pytest.py
,以避免与可能存在的run
程序冲突。在POSIX(MacOs,linux)上,按照@Petr所说的做,这是基于@alberge所说的:
chmod +x
#!/usr/bin/env python
/usr/local/bin/
对于所有用户cp -s
)路径下的文件名为pytest
,而不是pytest.py
在windows上:
C:\bin\
和~\bin\
?.PY
添加到PATHEXT
环境变量中,这样Windows就可以将具有python扩展名的文件识别为可运行文件,而无需键入扩展名python.exe
解释器关联(Windows资源管理器>;右键单击>;选中“始终使用所选程序”)。python安装程序中有一个选项可以为您执行此操作。pytest
在目录的PATH
(使用来自Windows资源管理器的链接外壳扩展或来自cmd的mklink name dest
)下有扩展名现在
system( "pytest" );
应该可以在两个系统中工作(Linux下的sh
,Windows下的cmd
)如果包含
run.py
的目录位于模块搜索路径(例如,PYTHONPATH
环境变量)上,则应该能够这样运行它:以下是有关
-m
命令行选项的文档:可以通过添加
到文件的开头,并使用
chmod +x
使其可执行。相关问题 更多 >
编程相关推荐