如何在指定的目标目录下运行sarge命令?
sarge 指定子进程工作目录的实现方法
原有写法的问题
- 路径转义错误:Windows路径字符串以单个反斜杠
\结尾时,普通Python字符串会把这个\和后面的闭合双引号识别为转义序列\",直接触发语法错误,代码根本无法执行。 - 参数传递逻辑:sarge本身不需要单独封装工作目录参数,它会把所有未被自身接口消费的关键字参数,直接透传给底层的
subprocess.Popen调用,而Popen原生就支持cwd参数来指定子进程启动时的工作目录,你传参的思路本身是对的,只是被路径转义问题卡住了。
可直接运行的正确代码
- 处理Windows路径时优先加
r前缀用原始字符串,从根源避免反斜杠转义的问题 - 直接在
sarge.run()调用里传入cwd参数即可
from sarge import run import os # 定义目标运行目录,使用原始字符串规避转义问题 target_work_path = r"...\rclone-v1.54.0-windows-amd64" # 可选:提前校验目录存在性,避免路径无效报错 if not os.path.isdir(target_work_path): raise NotADirectoryError(f"指定的运行目录无效:{target_work_path}") # 透传cwd参数,sarge会自动将其传递给底层进程创建逻辑 run('echo "Hello, world!"', cwd=target_work_path)
效果说明
用这种方式启动的子进程,工作目录和手动切换到目标目录后再执行命令的效果完全一致,完全满足“可执行文件必须在自身所属目录下正常运行”的要求。
内容的提问来源于stack exchange,提问作者Nikko
相关产品推荐
相关产品推荐

