在 Windows 批处理脚本中执行多行 python 代码

Execute multi-line python code inside Windows Batch script

我想在 Windows 批处理脚本中使用多行 python 语句。

比如我的BAT脚本是:

@echo off
echo "Executing Python Code..."
goto python_code

:python_code_back
echo "Executed Python Code!"

pause
exit()

:python_code
python -c print("""Python code running""")
goto python_code_back

python -c 适用于单个语句。但是让我的 python 代码嵌入是:

import random
num = input("Enter Number: ")
num = int(num)
if num%2 == 0:
  print("Even")
else:
  print("Odd")
  
exit()

如何将此 Python 代码 嵌入我的 Windows 批处理脚本不调用另一个 python 脚本或创建临时 python 文件?

我有一些选择:

  1. python -c 与分号一起使用:我如何打算像 if 这样的代码 上面的陈述?如果有办法,人们可能仍然想要干净的代码 多行,但我很感激这个答案。

  2. 我可以 运行 python 并找到一种向解释器发送命令的方法吗?也许使用子流程?

  3. 有什么方法可以构建一个包含 python 代码的多行字符串,然后将其发送给 python 解释器或 python 命令?

  4. 在 bash 中,我们可以使用 EOF 来保持多行清洁。有没有类似的方法to this in BAT? I think no because people have proposed many workarounds

  5. 能否使用 Batch 专门解释的 '''(三个单引号)或 """(三个双引号)语法?喜欢 here?

这样试试:

0<0# : ^
''' 
@echo off
echo batch code
python %~f0 %* 
exit /b 0
'''

import random
import sys



def isOdd():
    print("python code")
    num = input("Enter Number: ")
    num = int(num)
    if num%2 == 0:
      print("Even")
    else:
      print("Odd")

def printScriptName():
    print(sys.modules['__main__'].__file__)
    
eval(sys.argv[1] + '()')
exit()

用法示例:

call pythonEmbeddedInBatch.bat isOdd
call pythonEmbeddedInBatch.bat printScriptName

第一行将是 python 中的布尔表达式,但是批量重定向到一个空标签。批处理代码的其余部分将在多行 python 注释中。