【问题标题】:check_call and command line arguments on WindowsWindows 上的 check_call 和命令行参数
【发布时间】:2012-05-12 06:55:35
【问题描述】:

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

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

【问题讨论】:

  • 在 win7 中使用 python2.7 对我来说效果很好。您确定您的脚本正在正确解析 args 吗?
  • @jdi:谢谢;我已经更新了我的问题描述。
  • 不知道你为什么把它重新标记为 scons?它特别是一个 Windows 批处理文件命令行参数问题。不是 python 或 scons。
  • @jdi:希望 scons 专家能看到问题并识别解决方案。如果您愿意,请将其删除。

标签: python windows batch-file command-line-arguments scons


【解决方案1】:

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

my_script.py

import sys
print sys.argv

python 外壳

>>> 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"'])

【讨论】:

  • 谢谢。我认为这只是 Windows 批处理文件的限制。由于我无法编辑实际的批处理文件以去除引号,因此我必须找到其他解决方法。
  • @JaredHoberock:是的,它特别是一个 Windows 批处理问题。在我链接的同一篇文章中,它提出了导致批处理文件首先无法使用的原因之一:-/
  • 在批处理文件中,您可以使用echo %~1 显示不带引号的foo=bar
  • @Aacini:不幸的是,OP 说他不能编辑那些批处理文件
猜你喜欢
  • 2021-02-13
  • 2015-02-23
  • 2012-04-10
  • 2012-07-21
  • 2016-03-25
  • 2010-09-09
  • 2012-10-04
  • 2013-01-03
  • 2021-07-07
相关资源
最近更新 更多