[英]How can I run a python command for the correct name (py, python, python3)
我认为这与: 如何检查 Bash 脚本中是否存在程序?
具体来说,我想在有py
但没有python3
的计算机上运行py -m http.server
,我想在有python3
但没有py
的计算机上运行python3 -m http.server
。 我还尝试检查版本号: py -v && py -m http.server; python3 -v && python3 -m http.server
py -v && py -m http.server; python3 -v && python3 -m http.server
但这似乎仍然有同样的问题,并且按 ctrl+C 二十次并不能杀死它。
我试过py && py -m http.server; python3 && python3 -m http.server
py && py -m http.server; python3 && python3 -m http.server
但我相信它正在执行 python 中的第二个命令。 此外,Python 在其他计算机上还有其他别名。 我知道我可以将py
设置为python3
的别名,但我正在寻找一个通用的解决方案。
(旁注:这真的让我很困扰,这是不一致的。他们都应该工作。)
最终,我想要一个并行运行两件事的脚本:第一个只是npm run dev
上面有一个--watch
并且必须继续运行,另一个是cd docs/
然后使用 python 在本地主机上托管,然后打开 chrome 到localhost:8000
,非常感谢额外的帮助,仍然是 Linux 的初学者。
我还想创建第二个运行npm run build
的命令,将 docs/sw.js 中的第二行从const dynamicCacheName = 'site-dynamic-vNUMBER';
用 NUMBER+1 替换 NUMBER。
这能满足你的要求吗? 假设 bash 或类似:
( py -V && py -m http.server ) || ( python3 -V && python3 -m http.server )
在我的盒子上,它执行以下操作:
$ ( py -V && py -m http.server ) || ( python3 -V && python3 -m http.server )
py: command not found
Python 3.5.2
Serving HTTP on 0.0.0.0 port 8000 ...
对于你问题的第二部分,你可以有一个像这样的小 bash 脚本(我包括 python 或 py 检查):
#!/bin/bash
npm run dev --watch &
chromium-browser "http://localhost:8000" 2>/dev/null &
cd docs/ || exit # Exit if the cd command fails
if command -v py -V &> /dev/null; then
echo "py"
py -m http.server
elif command -v python3 -V &> /dev/null; then
echo "python3"
python3 -m http.server
else
echo "Neither command found"
fi
&
在命令结束时将在后台运行它,如上所述,它仍将显示命令的 output。
如果您使用 CTRL+C 终止脚本,它将终止所有内容,铬、python 服务器和 npm 运行。
我实际上想发布一个完整的答案,因为我从几个答案和评论以及与朋友聊天中得到了我想要的:
I installed the npm package concurrently
and then added a local-dev
npm script in my package.json
:
"scripts": {
"dev-no-watch": "postcss src/styles.css -o docs/css/styles.css",
"dev": "postcss src/styles.css -o docs/css/styles.css --watch --verbose",
"build": "cross-env NODE_ENV=production postcss src/styles.css -o docs/css/styles.css && cleancss -o docs/css/styles.css docs/css/styles.css",
"localhost": "cd docs && ( py -V && py -m http.server ) || ( python3 -V && python3 -m http.server )",
"local-dev": "concurrently --kill-others \"npm run dev\" \"npm run localhost\""
},
它同时运行,并且在按下 ctrl+C 时,也会同时杀死两者。
我当然从检测 python 版本并正确运行/优雅地失败等的原始问题的答案中添加了localhost
,这就像一个魅力。
希望这个答案对将来的某人有所帮助:)
(现在我只需要找出 hos 来独立地从命令行操作系统编辑一行文件)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.