如何从python脚本检查程序是否存在?
比方说,你要检查wget
或curl
可用.我们假设他们应该走在路上.
看到多平台解决方案是最好的,但目前Linux已经足够了.
提示:
--version
.此外,我会感谢一个更通用的解决方案,比如 is_tool(name)
我正在尝试在我的 linux 计算机上升级 cmake。这是我使用的命令。
删除旧的 cmake:
sudo apt purge --auto-remove cmake
Run Code Online (Sandbox Code Playgroud)
从https://cmake.org/download/下载并解压 cmake-3.13.3.tar.gz
然后在提取的 cmake 文件夹中:
./bootstrap
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
当我这样做的时候cmake --version
它回来了
bash: /usr/bin/cmake: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这表明 .cmake 中不存在 cmake 可执行文件/usr/bin
。但是当我运行which cmake
它返回
/usr/local/bin/cmake
Run Code Online (Sandbox Code Playgroud)
这确实存在。
我如何将命令cmake
指向/usr/local/bin/cmake
?
我的$PATH
节目
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
编辑:与另一个问题不同,因为我确切地知道 cmake 可执行文件在哪里--version
并且which
具有不同的效果。
我希望能够从shell脚本判断任何POSIX系统上是否存在命令.
在Linux上,我可以执行以下操作:
if which <command>; then
...snip...
fi
Run Code Online (Sandbox Code Playgroud)
但是,which
当命令不存在时,Solaris和MacOS 不提供退出失败代码,它们只是向STDOUT输出错误消息.
另外,我最近发现which
命令本身不是POSIX(参见http://www.opengroup.org/onlinepubs/009695399/utilities/)
有任何想法吗?
正如标题所问,我如何确定它?仅仅能够在 Linux 机器上使用 ssh 是否意味着安装了 openSSH?我试过了ssh -V
,这给了我一个版本号,但这是否意味着安装了 openSSH 或者 ssh 命令来自另一个工具?
我有以下脚本:
#!/usr/bin/env python
import sys
import pyttsx
def main():
print 'running speech-text.py...'
engine = pyttsx.init()
str = "Hi..."
if len(sys.argv) > 1:
str = sys.argv[1]
engine.say(str)
engine.runAndWait()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
而且我把它放进去了 /usr/bin/speech-test.py
我还给root了它的可执行权限和所有权:
sudo chown root:root /usr/bin/speech-test.py
sudo chmod 4755 /usr/bin/speech-test.py
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行,此脚本将只能正确运行sudo speec-test.py
.如果我试图运行它只是speech-test.py
它抱怨没有找到一堆ALSA lib文件.
我错过了让我的脚本以root权限运行的东西吗?
我使用以下命令在克隆存储库后编译了curl:
./buildconf
./configure --with-libssh2
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
但是,在sudo make install之后,如果
curl -V
,我得到:bash下/usr/bin/curl: No such file or directory
。/usr/local/bin/curl -V
,我得到:/usr/local/bin/curl: symbol lookup error: /usr/local/bin/curl: undefined symbol: curl_mime_type
。我尝试通过将curl / src的路径添加到我的PATH变量来解决这个问题,这使curl命令从终端为我的用户工作。但是,如果我尝试安装php-curl
,可以理解apache不会看到卷曲,而是安装了另一种。
关于如何解决此问题的任何想法?
编辑:评论中提到的另一篇文章是询问编译后在哪里可以找到可执行文件。那部分被回答了。但是,如果不将条目添加到PATH变量中,这似乎是不正确的,但是我仍然无法使curl正常工作。这就是我现在要弄清楚的部分。