Bai*_*ang 7 python windows bash batch-file
在bash中,我们可以:
python - << EOF
import os
print 'hello'
EOF
在bash脚本中嵌入python代码片段.
但是在Windows批处理中,这不起作用 - 尽管我仍然可以使用python -c,但这需要我将我的代码拼写成一行,这是我试图避免的.
有没有办法在批处理脚本中实现这一点?
谢谢.
apr*_*nce 16
更高效,加上它将所有命令行参数传递给脚本并从脚本返回退出代码:
@SETLOCAL ENABLEDELAYEDEXPANSION & python -x "%~f0" %* & EXIT /B !ERRORLEVEL!
# Your python code goes here...
这是对正在发生的事情的分解:
@ 防止打印脚本行SETLOCAL ENABLEDELAYEDEXPANSION允许!ERRORLEVEL!在python脚本运行后进行评估&允许另一个命令在同一行上运行(类似于UNIX ;)python 运行python解释器(必须在%PATH%)-x 告诉python忽略第一行(运行python -h获取详细信息)"%~f0"扩展到当前正在执行的批处理脚本的完全限定路径(参数%0).如果路径包含空格,则引用它%* 扩展传递给脚本的所有参数,有效地将它们传递给python脚本EXIT /B告诉Windows Batch仅退出当前批处理文件(使用just EXIT会导致调用解释器退出)!ERRORLEVEL!运行后,将扩展为上一个命令的返回码.用作参数EXIT /B,它会导致批处理脚本退出,并从python解释器接收返回代码注意:如果您的python二进制文件不在PATH中或位于非标准位置,您可能必须将"python"更改为其他内容.例如:
@"C:\Path\To\Python.exe" -x ...
jeb*_*jeb 12
你可以使用混合技术.
1>2# : ^
'''
@echo off
echo normal 
echo batch code
echo Switch to python
python "%~f0"
exit /b
rem ^
'''
print "This is Python code"
批处理代码在多行字符串中,'''因此对于python来说这是不可见的.
批处理解析器没有看到python代码,因为它之前退出.
第一行是关键.
它对批处理也有效,对于python也是如此!
在python中,它只是1>2没有输出的无意义比较,其余部分是由注释#.  
对于批处理1>2#是将流重定向1到文件2#.
该命令是一个冒号,:表示标签,标记的行永不打印.
然后最后一个插入符只是将下一行附加到标签行,因此批处理不会看到该'''行.
| 归档时间: | 
 | 
| 查看次数: | 3561 次 | 
| 最近记录: |