1

我的 python 程序在 Windows 上调用一个脚本,使用check_call

import subprocess

subprocess.check_call(['my_script.bat', 'foo=bar'])

我希望my_script.bat收到一个命令行参数 ( foo=bar),但收到两个 (foobar)。换句话说,似乎等号被转换为空格。在 Linux 上一切正常。

在 Windows 上格式化这个字符串的正确方法是什么,以便my_script看到一个包含等号的参数?

my_script.bat

echo %1

在我的实际应用中,my_script.batscons.bat.

4

1 回答 1

1

这个案例在 Windows 7 下测试对我来说很好,使用 python2.7

我的脚本.py

import sys
print sys.argv

蟒蛇壳

>>> import subprocess
>>> subprocess.check_call('python', 'my_script.py', 'arg1', 'foo=bar')
['myscript.py', 'arg1', 'foo=bar']
0

您可能想要验证您的“my_script”如何处理传入的参数。

更新

由于您已经更新了问题以反映您正在专门使用 Windows 批处理文件,因此这里是解决方案:http: //geoffair.net/ms/batch.htm

注意:如果是分号,';' 或等号 (=) 用作批处理文件的命令行参数,则将其视为空格。例如,在以下 test.bat 批处理文件中 -

等号是一个特殊字符,将被空格替换。需要引用:

subprocess.check_call(['my_script.bat', '"foo=bar"'])
于 2012-05-02T19:28:15.927 回答