Windows系统下无需中间bat如何直接从Photoshop ES脚本传递变量到Python
解决方案
完全可以跳过中间批处理文件,直接在Photoshop的ExtendScript(JSX)中调用Python解释器并传递变量,无需额外BAT中转,以下是两种可行实现方式:
方式1:通过继承环境变量传参(更稳定,无特殊字符转义问题)
该方案利用子进程会继承父进程环境变量的特性,无需拼接命令参数,避免空格、特殊符号导致的解析错误。
Photoshop脚本 talk_to_python.jsx
// 此处填Python解释器完整路径,若已配置系统环境变量可直接写"python" var pythonExePath = "python"; // 目标Python脚本的完整路径 var pyScriptPath = "D:\\some_path\\some_folder\\talk_to_python.py"; // 需要传递的自定义变量 var myStr = "Wiggle, wiggle, wiggle wiggle, yeah!"; // 设置环境变量,启动的Python进程会自动继承该变量 $.setenv("MY_STR", myStr); // 直接执行Python脚本 File(pythonExePath + " " + pyScriptPath).execute();
对应Python代码 talk_to_python.py
import os # 直接读取继承的环境变量 input_str = os.getenv("MY_STR") if input_str: print(input_str)
方式2:直接拼接命令行参数
如果不需要用环境变量,也可以直接把参数拼到Python调用命令中,注意给字符串加双引号避免空格截断。
Photoshop脚本 talk_to_python.jsx
var pythonExePath = "python"; var pyScriptPath = "D:\\some_path\\some_folder\\talk_to_python.py"; var myStr = "Wiggle, wiggle, wiggle wiggle, yeah!"; // 构造执行命令,参数外层加双引号避免空格被截断 var execCommand = `${pythonExePath} ${pyScriptPath} "${myStr}"`; File(execCommand).execute(); // 若需要保留命令窗口查看输出,可改用以下命令: // var execCommand = `cmd /k ${pythonExePath} ${pyScriptPath} "${myStr}"`;
对应Python代码 talk_to_python.py
和你原本的代码完全一致,无需修改:
import sys args = sys.argv[1:] if len(args) != 0: s = " ".join(args) # 打印接收的字符串 print(s)
运行结果
两种方式执行后均可正常输出:
Wiggle, wiggle, wiggle wiggle, yeah!
注意事项
- 若运行提示找不到Python,将
python替换为你的Python解释器完整路径即可,路径中的反斜杠需要写2个做转义,例如"C:\\Users\\xxx\\AppData\\Local\\Programs\\Python\\Python310\\python.exe" - 若传递的参数包含双引号等特殊符号,优先使用方式1的环境变量方案,避免命令解析错误。
内容的提问来源于stack exchange,提问作者Ghoul Fool
相关产品推荐
相关产品推荐

