我知道以前有類似的問題,但它們似乎都已通過重新設計參數傳遞的方式(即使用列表等)得到解決。Python子流程:無法逃避報價
但是,我有一個問題,因爲我沒有這個選項。有一個特定的命令行程序(我使用的是Bash shell),我必須傳遞一個帶引號的字符串。它不能無引號,它不能有複製的參數,它只需要單引號或雙引號。
command -flag 'foo foo1'
我不能使用command -flag foo foo1
,我也可以使用command -flag foo -flag foo1
。我相信這是對命令如何編程以接受輸入的疏忽,但我無法控制它。
我傳遞的參數如下:
self.commands = [
self.path,
'-flag1', quoted_argument,
'-flag2', 'test',
...etc...
]
process = subprocess.Popen(self.commands, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
results = process.communicate(input)
哪裏quoted_argument
是像 '富foo1 foo2的'。 我試過轉義單引號("\'foo foo1 foo2\'"
),但沒有輸出。
我知道這被認爲是不好的做法,因爲它是不明確的解釋,但我沒有另一種選擇。有任何想法嗎?
相反quoted_argument'的'你能告訴我們你實際投入的命令字符串?令人費解的是,你的例子是'command -flag'foo foo1'',但'self.commands'具有不同的標誌。但是......只是做'quoted_argument =「foo foo1」'(即完全刪除引號)應該可以工作。 – tdelaney
另外,只需使用shell'Popen(「command -flag'foo foo1'」,shell = True)''。 – tdelaney
我試圖用命令來概括,實際的命令有點不同。我實際上得到一個列表並將它連接到引用的參數中,所以顯示有點複雜。如果我不需要,我也不希望連接shell = True的字符串。我會嘗試刪除引號。 –