Python调用Cygwin Bash脚本时cp/sed等命令找不到的解决方法
解决思路
用登录Shell启动Bash
Cygwin的外部命令(如cp、sed)依赖完整的环境变量加载,直接用bash -c不会加载/etc/profile等配置。改用bash --login -c启动登录Shell,强制加载环境变量,同时把Windows路径转换为Cygwin识别的/cygdrive/盘符/路径格式:import subprocess cmd = ["C:\\cygwin64\\bin\\bash", "--login", "-c", "cd /cygdrive/d/Maria_Eugenia/SOFT/VIEVS_forupdate2/automatic-py; ./ncextract.sh"] ret = subprocess.call(cmd)手动注入环境变量
复制当前系统环境变量,将Cygwin的bin目录添加到PATH最前端,确保Bash能找到外部命令:import os, subprocess env = os.environ.copy() env['PATH'] = r"C:\cygwin64\bin;" + env['PATH'] cmd = ["bash", "-c", "cd /cygdrive/d/Maria_Eugenia/SOFT/VIEVS_forupdate2/automatic-py; ./ncextract.sh"] ret = subprocess.call(cmd, env=env)调用Cygwin启动脚本
直接使用Cygwin自带的启动批处理文件,传递执行脚本的命令,确保环境完全匹配手动打开Cygwin时的状态:import subprocess cmd = [r"C:\cygwin64\Cygwin.bat", "-c", "cd /cygdrive/d/Maria_Eugenia/SOFT/VIEVS_forupdate2/automatic-py && ./ncextract.sh"] ret = subprocess.call(cmd)
内容的提问来源于stack exchange,提问作者euge1780
相关产品推荐
相关产品推荐

