You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:01