[英]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.