在bash中,我们可以:
python - << EOF
import os
print 'hello'
EOF
在bash脚本中嵌入python代码段。
但是在Windows批处理中,这不起作用 - 虽然我仍然可以使用python -c,但这需要我将我的代码拼写成一行,这是我试图避免的。
有没有办法在批处理脚本中实现这一点?
感谢。
答案 0 :(得分:15)
更高效,另外它将所有命令行参数传递给脚本并返回退出代码:
@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仅退出当前批处理文件(仅使用EXIT
会导致调用解释器退出)!ERRORLEVEL!
在运行后扩展为上一个命令的返回码。用作EXIT /B
的参数,它会导致批处理脚本退出,并从python解释器接收返回代码注意:如果您的python二进制文件不在PATH中或位于非标准位置,则可能必须将“python”更改为其他内容。例如:
@"C:\Path\To\Python.exe" -x ...
答案 1 :(得分:11)
你可以使用混合技术。
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#
。
命令是冒号:
,表示标签,标记的行永不打印
然后最后一个插入符只是将下一行附加到标签行,因此批处理不会看到'''
行。
答案 2 :(得分:1)
不要错过你必须立即在批处理文件中指定python脚本的想法。将python代码放在一个单独的文件中,然后只需从Windows批处理文件中启动python下的单独文件。
答案 3 :(得分:0)
我知道这样做的唯一方法是从批处理文件中调用Python脚本,如下所示:
@echo off
REM whatever other code
python python_script.py
REM rest of batch file...
答案 4 :(得分:0)
whoami /priv
可以包含任何字符或字符串,但只能包含“!”感叹是除了。 '!'用于变量,因此您必须设置'DisableDelayedExpansion'。最后,你必须设置'endlocal'。就是这样。
您可以将此例程用于任何脚本或任何文档。即使是cmd脚本......
答案 5 :(得分:0)
一个简单的命令:Windows cmd提示符仅理解双引号,因此您可以将它们加倍以使其与// Declared in Constructor
this.taxHttpOptions = {
headers: new HttpHeaders(
{
"Authorization": "Basic " + btoa('testTEST123:fff'),
"Content-Type": "application/json",
},
)
}
attemptPOST(){
var dataString = `[{
"unique_id":"record1",
"record_type":"S",
"account_number":"15301",
"customer_type":1,
"location_a":"60515",
"invoice_date":"20170401",
"invoice_number":"1310556",
"userdef2":"Hi There !!",
"product_code":"V001",
"service_code":2,
"provider":3,
"charge_amount":100,
"units":1
}]`;
this.http.post('https://abctest.com/api/batches', dataString, this.taxHttpOptions)
.subscribe(
data => {
console.log(data)
}
)
}
选项一起使用:
-c
或使用Windows cmd根本无法解释的简单引号:
python -c print("""Hi""")