抱歉,我不是 Python 專家。有人可以向我解釋以下代碼的行為:
import sys
def send_cmd():
param = r'--password="some\"pass"'
print >> sys.stdout, param
cmd = [
'--adminName', 'admin',
param,
'--host', '127.0.0.1',
]
print >> sys.stdout, cmd
if __name__ == "__main__":
send_cmd()
我得到的輸出如下:
--password="some\"pass"
['--adminName', 'admin', '--password="some\\"pass"', '--host', '127.0.0.1']
因此,當我將原始值分配給變數時,我會得到一個反斜杠,但是當我將此變數放入陣列時,它會將字串轉換為具有雙反斜杠。但我想保持原樣 - 帶有單個反斜杠的原始值。我怎樣才能做到這一點?
謝謝。
更新:
當我嘗試在 Java 應用程式中獲取密碼值時,會發生實際問題。Python 將 cmd 以如下形式傳遞給 java:
jar javaApp --adminName admin --password="some\\"pass"--host 127.0.0.1
在 java 應用程式中,我使用 org.apache.commons.cli.CommandLine.getOptionValue("--password") 它回傳給我“some(double backslash)”pass”并且java不能轉義雙引號
UPD2:
好吧,事實證明python實際上不是問題。問題是 CommandLineParser (LenientPosixParser) 無法正確決議使用轉義字符傳遞的引數。所以當我傳遞給命令列時:
--password "some\"pass"
CommandLineParser 回傳“some”pass 值而不修剪周圍的引號并且不轉義雙引號字符。
uj5u.com熱心網友回復:
如果字串最初是用r
前綴定義的,Python 不會跟蹤。
值總是相同的,這只是列印值時的表示問題。
相比:
>>> param = r'--password="some\"pass"'
>>> param
'--password="some\\"pass"'
>>> print(param)
--password="some\"pass"
>>> print(repr(param))
'--password="some\\"pass"'
>>> param == r'--password="some\"pass"'
True
>>> param == '--password="some\\"pass"'
True
uj5u.com熱心網友回復:
我不知道為什么會這樣做,但是您可以使用 for 回圈遍歷 cmd 并輸出每個字串來做到這一點
for i in cmd:
sys.stdout.write(i ' ')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314399.html