我有一個字符串,其是應該由在命令行中執行的成幀命令蟒子報價之前發送反斜線
cmdToExecute =「TRAPTOOL -a STRING‘ABC’-o STRING‘XYZ’」
我在考慮將字符串包含應該從命令提示符觸發的整個命令。如果仔細查看字符串cmdToExecute,可以看到包含在單引號中的值爲XYZ的選項o。有一個原因需要在單引號中給出,我的工具TRAPTOOL將無法處理該命令。
我使用subprocess.Popen執行整個命令。在shell執行我的命令之前,我打印的內容
print "Cmd to be exectued: %r" % cmdToExecute
myProcess = subprocess.Popen(cmdToExecute, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
(stdOut, stdErr) = myProcess.communicate()
上述命令的輸出, Cmd的要執行:TRAPTOOL -a STRING 「ABC」 -o \ 'XYZ \'。
你可以看到輸出顯示一個反斜槓自動添加,同時打印。實際上,字符串中不存在「\」,我使用正則表達式進行測試。但是,當腳本在我的盒子上運行時,TRAPTOOL會截斷接收服務器上字符串XYZ的部分。我手動複製粘貼打印輸出並嘗試發送它,我看到接收服務器上的相同錯誤。但是,當我刪除反斜線時,它發送陷阱時沒有任何截斷。
- 任何人都可以說,爲什麼出現這種情況?
- 有無論如何我們可以看到在subprocess.Popen中實際執行了哪個命令?
- 是否有任何其他方式我可以執行我的命令其他subprocess.Popen可以解決這個問題?
如果您是從頭開始手動構建命令,那麼您可以從頭開始創建列表:'''ABC''應該是'\「ABC \'' – Pyrce
''cmd = ['TRAPTOOL',' a','STRING','ABC','-o','STRING','XYZ']'。注意:引號內沒有引號。沒有解釋它們的解釋。 – jfs
@Pyrce:或三重引號可以使用:'r「」「TRAPTOOL -a STRING」ABC「-o STRING'XYZ'」「」' – jfs