我尝试使用python子进程运行ant作业。下面是我要执行的命令。在
ant -f ../lib/java/build.xml -Dno-gen-thrift="" -Dtestargs "--protocol=binary --transport=buffered" run-testserver
但是当我使用下面的命令使用子进程运行这个
^{pr2}$我在说“未知参数:--传输=缓冲”时出错。在
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中运行
实际上是两个命令行参数。shell解析第二个参数的外部双引号,并将字节字符串
protocol=binary transport=buffered
作为ant可执行文件的参数。Ant再也看不到双引号了。您应该用subprocess
复制相同的内容,并且not提供'-Dtestargs \" protocol=binary transport=buffered\"'
作为一个包含双引号的单参数。提供两个独立的参数,即两个列表项,一个是'-Dtestargs'
,另一个是' protocol=binary transport=buffered'
。在老实说,这只是一个有根据的猜测,但我很确定这是你的问题的一部分。在
另外,您应该注意到命令行解析可能是一个非常微妙的问题。参数经过不同的层,可能彼此不知道。例如,当您通过shell运行Python命令时,shell首先使用某种方法解析参数,然后将它们提供给CPython可执行文件,后者使用特定方法再次解析它们,然后Python应用程序代码使用特定方法再次解析参数。在您的例子中,Python的subprocess模块在使用系统调用生成新进程之前使用特定的方法创建参数数据,这会带来更复杂的情况。总而言之,结果可能是意外的行为,您可能必须调整命令行,以某种方式使Ant理解正确的事情。这可能很棘手。在
当我使用以下方法时,它对我有效
相关问题 更多 >
编程相关推荐