Windows系统PyCharm右键运行.sh文件

在参考了Windows系统下pycharm运行.sh文件,执行shell命令_shell在pycharm-CSDN博客

深度学习:PyCharm中运行Bash脚本_pycharm bash-CSDN博客

配置了右键执行.sh文件之后,发现在Windows的PyCharm中直接右键运行sh文件,存在如下问题:

  1. 有些命令在Linux中能正常运行,Windows中却不能,例如xargs、source、&&等

  2. 即使配置成sh.exe也只能通过在Terminal中输入脚本路径来运行它,无法做到在左侧文件导航目录那里,点右键直接运行

===========================

最终,我把所有.sh脚本全部,全部改成了.py文件,然后使用subprocess.run来运行shell命令。

例如:

原文件 -- scripts/format.sh

bash 复制代码
#!/bin/sh -e
set -x

[ -f pyproject.toml ] || ([ -f ../pyproject.toml ] && cd ..)

SKIP_MYPY=1 pdm run fast lint

修改后 -- scripts/format.py

python 复制代码
#!/usr/bin/env python
import os
import shlex
import subprocess
import sys
from pathlib import Path

work_dir = Path(__file__).parent.resolve().parent
if Path.cwd() != work_dir:
    os.chdir(str(work_dir))

cmd = "pdm run fast lint"
r = subprocess.run(shlex.split(cmd), env=dict(os.environ, SKIP_MYPY="1"))
sys.exit(None if r.returncode == 0 else 1)

修改之后,就可以直接右键运行了,如下图:

更多示例,可以通过如下方式查看:

bash 复制代码
git clone git@github.com:waketzheng/fast-dev-cli.git
cd fast-dev-cli
git diff v0.10.0 v0.10.1 scripts/

注:如果要执行的shell命令是以python开头的,如`python -m fast_dev_cli lint`,若系统中有多个版本的python解释器,最好把其中的python改成Path(sys.executable),如:

bash 复制代码
#!/usr/bin/env python
import shlex
import subprocess
import sys
from pathlib import Path

cmd = "python -m fast_dev_cli lint"
command = shlex.split(cmd)
r = subprocess.run([Path(sys.executable), *command[1:]])
sys.exit(None if r.returncode == 0 else 1)
相关推荐
强盛小灵通专卖员12 分钟前
闪电科创 SCI专业辅导
python·深度强化学习·研究生·ei会议·导师·sci期刊
跟橙姐学代码24 分钟前
自动化邮件发送的终极秘籍:Python库smtplib与email的完整玩法
前端·python·ipython
扯淡的闲人1 小时前
多语言编码Agent解决方案(2)-后端服务实现
开发语言·python·深度学习
蒋星熠1 小时前
深度学习实战指南:从神经网络基础到模型优化的完整攻略
人工智能·python·深度学习·神经网络·机器学习·卷积神经网络·transformer
万粉变现经纪人1 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘cuml’问题
python·scrapy·beautifulsoup·pandas·ai编程·pip·scipy
IT学长编程1 小时前
计算机毕业设计 基于Hadoop豆瓣电影数据可视化分析设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
大数据·hadoop·python·django·毕业设计·毕业论文·豆瓣电影数据可视化分析
java1234_小锋2 小时前
Scikit-learn Python机器学习 - 分类算法 - K-近邻(KNN)算法
python·算法·机器学习
大翻哥哥2 小时前
Python上下文管理器进阶指南:不仅仅是with语句
前端·javascript·python
QiZhang | UESTC2 小时前
JAVA算法练习题day11
java·开发语言·python·算法·hot100
PyHaVolask2 小时前
Python进阶教程:随机数、正则表达式与异常处理
python·正则表达式·异常处理·随机数生成