换言之,是否有跨平台的方式知道subprocess.Popen(file)
将在不首先执行的情况下执行哪个文件?是否有与'which'命令相当的Python
回答
我相信是有没有在Python库
>>> def which(pgm):
path=os.getenv('PATH')
for p in path.split(os.path.pathsep):
p=os.path.join(p,pgm)
if os.path.exists(p) and os.access(p,os.X_OK):
return p
>>> os.which=which
>>> os.which('ls.exe')
'C:\\GNUwin32\\bin\\ls.exe'
的Python 3.3添加shutil.which()
提供发现可执行文件的跨平台方式:
http://docs.python.org/3.3/library/shutil.html#shutil.which
返回路径一个可执行文件,如果给定的cmd被调用就会运行。如果不会调用cmd,则返回None。
样来电:
>>> shutil.which("python")
'/usr/local/bin/python'
>>> shutil.which("python")
'C:\\Python33\\python.EXE'
不幸的是,这并没有被移植到2.7.x.
版本3.3的shutil.shich实现的Python源代码在这里(只有几十行):http:// hg如果你将第1110行更改为'if if([cmd.lower()。endswith(ext.lower())for ext in pathext]).python.org/cpython/file/6860263c05b3/Lib/shutil.py#l1068 – joemaller 2013-06-10 13:53:56
) '(将发生器转换为列表)比在python 2.7中可用。 – cdhagmann 2014-04-11 13:01:00
Backport可在这里找到:https://github.com/mbr/shutilwhich – 2016-02-13 15:20:15
为Python 2和3的选项:
from distutils.spawn import find_executable
find_executable('python') # '/usr/bin/python'
find_executable('does_not_exist') # None
find_executable(executable, path=None)
只是试图找到在 '路径' 中列出的目录 '可执行文件'。如果'路径'是None
,则默认为os.environ['PATH']
。如果未找到,则返回“可执行”或None
的完整路径。
请记住,与which
不同,find_executable
实际上并未检查结果是否标记为可执行文件。如果您想确定subprocess.Popen
将能够执行文件,您可能需要致电os.access(path, os.X_OK)
来自行检查。
另外值得注意的是,Python的3.3+的shutil.which
已经通过第三方模块whichcraft被移植,并为Python 2.6,2.7提供,和3.x。
它可以通过上述GitHub页面(即pip install git+https://github.com/pydanny/whichcraft.git
)或Python包索引(即pip install whichcraft
)进行安装。它可用于像这样的:
from whichcraft import which
which('wget') # '/usr/bin/wget'
- 1. 是否有与Unix`which`命令相当的python?
- 2. 是否有与八度命令`格式位'相当的python?
- 3. 是否有与HighLine相当的Python?
- 4. 是否有一个与Unix的“which”命令类似的Perl模块?
- 5. 是否有一个相当于linux命令“perf stat”的窗口?
- 6. 是否有与Django中的Apache“别名”命令相当的功能?
- 7. R:是否有与Stata的codebookout命令相同的内容?
- 8. 是否有相当于Java的Boost :: Python?
- 9. 是否有与Java MessageFormat相当的Ruby?
- 10. 是否有与NSPredicate相当的Java?
- 11. 是否有与Haxe相当的atexit()?
- 12. 是否有与CSS/sass相当的JavaScript
- 13. 是否有与frexp相当的Java?
- 14. 是否有与VBScript相当的log4j?
- 15. 是否有与rails number_to_human相当的angularjs?
- 16. 是否有与MISRA C相当的Java?
- 17. 是否有与Oracle相当的mysqldump
- 18. 是否有与IFNULL相当的Objective-C?
- 19. 是否有与Java相当的getchar?
- 20. 是否有与MATLAB的conv2函数相当的Python?
- 21. “which”命令给我的源代码,而不是命令的路径
- 22. Python是否有关闭相当于__init__()
- 23. 是否有与PHP函数htmlspecialchars()相当的Python?
- 24. F#是否与Haskell相当?
- 25. GIT commit命令相当于SVN命令
- 26. 与枫隔离命令相似的命令是什么?
- 27. 是否有相当于kdiff3的命令行允许选择性合并?
- 28. 是否有一个相当于德尔福在C#中的“with”命令?
- 29. .keyCode与.which
- 30. Windows命令相当于egrep
https://github.com/amoffat/pbs/blob/master/pbs.py#L95 – 2012-03-26 18:21:17
默认情况下,子inherents父进程的环境。因此,对于PATH中的任何可执行文件(或相应的操作系统),不需要指定位置。 – 2012-03-26 20:12:01
@JoshLee看起来像PBS不再可用。 – Joe 2013-06-03 19:16:53