我有一个小的 python 脚本:
# args.py
import sys; print(sys.argv)
我怎样才能写一个.bat
将所有参数转发给该脚本的包装文件?
为了从测试中消除我的 shell,我将调用它:
import subprocess
import sys
def test_bat(*args):
return subprocess.check_output(['args.bat'] + list(args), encoding='ascii')
The 批处理文件的明显选择 https://stackoverflow.com/a/11637707/102441
@echo off
python args.py %*
适用于简单情况:
>>> test_bat('a', 'b', 'c')
"['args.py', 'a', 'b', 'c']\n"
>>> test_bat('a', 'b c')
"['args.py', 'a', 'b c']\n"
但当在任意字符串上尝试时,很快就会崩溃:
>>> test_bat('a b', 'c\n d')
"['args.py', 'a b', 'c']\n" # missing d
>>> test_bat('a', 'b^^^^^c')
"['args.py', 'a', 'b^c']\n" # missing ^^^^
是否有可能制作一个bat
文件未经修改地传递其参数?
为了证明不是subprocess
导致问题 - 尝试运行上面的
def test_py(*args):
return subprocess.check_output([sys.executable, 'args.py'] + list(args), encoding='ascii')
所有测试均按预期运行
类似问题:
-
获取 Windows 批处理脚本 (.bat) 中传递的参数列表 https://stackoverflow.com/q/357315/102441- 不解决无损转发问题
-
将传递的参数重定向到 Windows 批处理文件 https://stackoverflow.com/questions/980331/redirecting-passed-arguments-to-a-windows-batch-file- 解决了与我的问题相同的想法,但作为上述问题的重复项被错误地关闭,并且测试用例不太清晰
-
将所有批处理文件参数转发到内部命令 https://stackoverflow.com/q/11637501/102441- 问题不考虑极端情况,接受的答案对他们不起作用