簡體   English   中英

如何使用Python代碼在bash中使用換行符輸入多行

[英]How to take a multiline input in bash with newlines using Python code

我正在嘗試自動化使用Python在命令行上訂購SSL證書的方式。 但是我看到如何格式化用戶多行輸入的問題。 如何讓bash等到輸入完成並在單行輸出中獲得多行輸入?

對於訂購證書,我們生成的CSR格式如下

-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx
fjfawcwkefmFNaWamsdffjawfbjwnfkwmelfmw[wefkwaeifbhwfmamfawfoawfj
cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAMOf6uvCfqj9SbOg6b+IzO7YdaY3J59+Dkm3lIf9gXRZBohT4qpevoJt
kdfkdsnfjdsnewirubewfwfmoweuewfvwfwkfmlwfoerueyvwamladodfofehJDG
nJRl1sL32iIapTZABqA4e9ai+9HTOyV7bq5yMEqJiKFLh1VBHC+BlqXPIW6VjjXX
YX3jF2/Tp0ZAEG0yoHXr0D4JR+lFIIstsAuIbd529U5Oyl3js9Oxu0IDq//o2gkR
SnVby7uhuFy8rGEs70YP4dTbWs1Lu6QKATszX6V4CXzM9fwThVByeOH/1X/zPQYe
amCPR+c0nySBI+bQaISBxvyO/T8RKTMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IB
AQAxLFqyKABFeUIMTzWzOIWz8q9M0uWcMMdxA7+485F0m0QqSYIDHKjf7NnoIUZu
sPx+S9pQE3WZklaX1Kd/m7VEwhgI4ZVDJhnGAfxF4GDlLO8sVIZj2VcDcfypZ9U5
hWP1lCUx+2MIDhqZhMI/vEr0jipKdigMiPeHt/Dy3DpM5qdt2zjUZm9uZvP1/Azf
BTc6yaTwCTDuvGLgSJj5mqIxbDHjv/IQjxAnuzcN81pKEgXaYvGyQLuBTEDjq2qW
pxbKF8NfVOzcoK8afu/GPt4FrtxWoRg/jUUztyjVRKBrSwvmrzAfiV2yCNb0/sTK
Ffc3zbKLapk5/ZXrevrZJ2p4
-----END CERTIFICATE REQUEST-----

我將此作為用戶輸入,您可以看到它的格式設置,它每次都使用換行符。 但是,由於bash將換行符視為命令,因此它給了我錯誤。 我的問題或多或少與此類似: 如何將多行文件轉換為帶有換行符的bash字符串?

嘗試了一個while循環,看起來像這樣:

csr = ""
c = input("Enter CSR:")

while True:
    if "\n" in c:
        csr += c
        csr.replace("\n", "")
    break

但不能如所述那樣工作。

預期的結果是這樣的:

-----BEGIN CERTIFICATE REQUEST-----MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxfjfawcwkefmFNaWamsdffjawfbjwnfkwmelfmw[wefkwaeifbhwfmamfawfoawfjcmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOf6uvCfqj9SbOg6b+IzO7YdaY3J59+Dkm3lIf9gXRZBohT4qpevoJtkdfkdsnfjdsnewirubewfwfmoweuewfvwfwkfmlwfoerueyvwamladodfofehJDGnJRl1sL32iIapTZABqA4e9ai+9HTOyV7bq5yMEqJiKFLh1VBHC+BlqXPIW6VjjXXYX3jF2/Tp0ZAEG0yoHXr0D4JR+lFIIstsAuIbd529U5Oyl3js9Oxu0IDq//o2gkRSnVby7uhuFy8rGEs70YP4dTbWs1Lu6QKATszX6V4CXzM9fwThVByeOH/1X/zPQYeamCPR+c0nySBI+bQaISBxvyO/T8RKTMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxLFqyKABFeUIMTzWzOIWz8q9M0uWcMMdxA7+485F0m0QqSYIDHKjf7NnoIUZusPx+S9pQE3WZklaX1Kd/m7VEwhgI4ZVDJhnGAfxF4GDlLO8sVIZj2VcDcfypZ9U5hWP1lCUx+2MIDhqZhMI/vEr0jipKdigMiPeHt/Dy3DpM5qdt2zjUZm9uZvP1/AzfBTc6yaTwCTDuvGLgSJj5mqIxbDHjv/IQjxAnuzcN81pKEgXaYvGyQLuBTEDjq2qWpxbKF8NfVOzcoK8afu/GPt4FrtxWoRg/jUUztyjVRKBrSwvmrzAfiV2yCNb0/sTKFfc3zbKLapk5/ZXrevrZJ2p4------END CERTIFICATE REQUEST-----

但是,當我在終端中輸入CSR作為輸入時,就會出現如下錯誤:

$ MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx
bash: MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx: command not found
$ ETAPBgNVBAcMCFJvc2VsYW5kMREwDwYDVQQKDAhBRFAsIExMQzEfMB0GA1UEAwwW
bash: ETAPBgNVBAcMCFJvc2VsYW5kMREwDwYDVQQKDAhBRFAsIExMQzEfMB0GA1UEAwwW: command not found
$ cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
bash: cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC: command not found

有人可以告訴我一種在bash中輸入多行然后將密鑰放在一行中的方法嗎?

看看這個我如何從標准輸入讀入多行到一個變量

您可以使用bash命令讀取多行內容,例如

myVar=$(</dev/stdin)

並且您需要在最后輸入Ctrl + D來關閉輸入流。

如果您正在尋找python代碼,則可能需要將輸入語句包含在循環中。 像這樣:

print("Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it.")
contents = []
while True:
    try:
        line = input()
    except EOFError:
        break
    contents.append(line)

暫無
暫無

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

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