繁体   English   中英

使用python子进程运行ant脚本时出错

[英]Error when running ant script using python subprocess

我正在尝试使用python子进程运行一个蚂蚁作业。 以下是我尝试执行的命令。

ant -f ../lib/java/build.xml -Dno-gen-thrift="" -Dtestargs "--protocol=binary --transport=buffered" run-testserver

但是当我使用以下命令使用子进程运行此命令时

subprocess.call(['ant','-f','lib/java/build.xml','-Dno-gen-thrift=\"\"','-Dtestargs \"--protocol=binary --transport=buffered\"','run-testserver'])

我收到错误消息,说“未知参数:--transport = buffered”。

Unknown argument: --protocol=binaty
ant [options] [target [target2 [target3] ...]]
Options: 
  -help, -h              print this message
  -projecthelp, -p       print project help information  ...........

这里的'--protocol = binary'和'--transport = buffered'是使用此ant脚本执行的解析到java类的命令行参数。 当我仅发送一个论据时,以下命令也可以正常运行。

subprocess.call(['ant','-f','lib/java/build.xml','-Dno-gen-thrift=\"\"','-Dtestargs \"--protocol=binary\"','run-testserver'])

subprocess.call(['ant','-f','lib/java/build.xml','-Dno-gen-thrift=\"\"','-Dtestargs \"--transport=buffered\"','run-testserver'])

这是什么原因呢?

在您将直接在Shell中运行的原始命令行中,

-Dtestargs "--protocol=binary --transport=buffered"

实际上是两个命令行参数。 shell解析第二个参数的外部双引号,并提供字节字符串--protocol=binary --transport=buffered作为ant可执行文件的参数。 Ant不再看到双引号。 您应该再现与同一subprocess ,而不是提供'-Dtestargs \\"--protocol=binary --transport=buffered\\"'作为一个参数,包括双引号。 提供两个独立的参数,即两个列表项,一个为'-Dtestargs' ,另一个为'--protocol=binary --transport=buffered'

老实说,这只是有根据的猜测,但是我很确定这是您问题的一部分。

另外,您应该注意命令行解析可能是一个非常棘手的问题。 参数经过可能彼此不认识的单独层。 例如,当您通过外壳程序运行Python命令时,外壳程序首先使用某种方法解析参数,将其提供给CPython可执行文件,后者再使用某种方法再次解析参数,然后Python应用程序代码再次解析参数使用某种方法。 在您的情况下,Python的子进程模块会在使用系统调用生成新进程之前使用某种方法创建参数数据,这会引入更大的复杂性。 总而言之,结果可能是意外行为,您可能必须调整命令行以某种方式使Ant理解正确的东西。 那可能很棘手。

当我使用以下内容时,它对我有用

subprocess.call(['ant','-f','lib/java/build.xml','-Dno-gen-thrift=\"\"','-Dtestargs', '\"--protocol=binary', '--transport=buffered\"','run-testserver'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM