簡體   English   中英

python-在subprocess.check_output中使用反斜杠

[英]python - using backslash with subprocess.check_output

我正在編寫一個腳本,以在Ubuntu操作系統中使用Python連接到我的wifi。 以下是我的代碼:

from subprocess import check_output
network = 'abcnetwork'
password = r'Pass|\|ew2017;'
output = check_output(
    ['nmcli d wifi connect {network} password {password}'.format(
        network=network, password=password)],
    shell=True
)

但是由於\\ :我遇到了錯誤:

/bin/sh: 1: |ew2017: not found
`enter code here`Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/usr/lib/python3.5/subprocess.py", line 626, in check_output
    **kwargs).stdout
  File "/usr/lib/python3.5/subprocess.py", line 708, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['nmcli d wifi connect abcnetwork password Pass|\\|ew2017;']' returned non-zero exit status 127

我的代碼有什么錯誤? 請幫助。

將命令作為單詞列表而不是單個字符串(使用shell=False ,這是默認值)傳遞。

output = check_output(['nmcli', 'd', 'wifi', 'connect', network, 'password', password])

不要使用shell=True依賴於shell單詞拆分。 相反,將參數列表傳遞給check_output

output = check_output([
    'nmcli', 'd', 'wifi', 'connect', network, 'password', password
])

這樣,您也不需要使用額外的引號。

官方文檔中建議不要使用shell=True

只需在變量中添加" ,這樣shell就不會將反斜杠視為換行符。

'nmcli d wifi connect "{network}" password "{password}"'

在您的示例中,您命令等於:

nmcli d wifi connect abcnetwork password Pass|\
|ew2017;

如果將其復制粘貼到終端中,則將獲得與子進程show完全相同的輸出(除了python traceback):

/bin/sh: 1: |ew2017: not found

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM