while用法 - Python:通過讀取stdout來關閉for循環




while else python (2)

使用subprocess.check_output來調用gpg並根據其輸出中斷循環。

像這樣的東西(未經測試,因為我不知道任何關於gpg ):

import subprocess

dictionaryfile = "/root/john.txt"
pgpencryptedfile = "helloworld.txt.gpg"

with open(dictionaryfile, 'r') as f:
    for line in f:
        x = line.rstrip('\n')
        cmd = ["echo " + x + " | gpg --passphrase-fd 0 " + pgpencryptedfile]
        output = subprocess.check_output(cmd, shell=True)
        if 'gpg: WARNING: message was not integrity protected' in output:
            break
import os

dictionaryfile = "/root/john.txt"
pgpencryptedfile = "helloworld.txt.gpg"

array = open(dictionaryfile).readlines()


for x in array:
    x = x.rstrip('\n')
    newstring = "echo " + x + " | gpg --passphrase-fd 0 " + pgpencryptedfile
    os.popen(newstring)

我需要在for循環中創建一些可以讀取gpg輸出的東西。 當gpg輸出這個字符串gpg: WARNING: message was not integrity protected ,我需要循環關閉並打印成功!

我怎麼能做到這一點,它背後的原因是什麼?

感謝大家!


您可以使用允許您使用的子流程模塊:

subprocess.call(args, *, stdin, stdout, stderr, shell)

(請參閱Python文檔以了解如何使用這些參數。)

這很好,因為您可以輕鬆地讀取您所調用的任何程序的退出代碼。

例如,如果您將“newstring”更改為:

"echo " + x + " | gpg --passphrase-fd 0 " + pgpencryptedfile | grep 'gpg: WARNING: message was not integrity protected'

如果匹配,則grep將返回0,如果找不到匹配,則返回1。 ( 來源

grep的這個退出代碼將從subprocess.call()函數返回,你可以很容易地將它存儲在一個變量中,並使用一個if語句。

編輯:正如馬修亞當斯在下面提到的,你也可以讀取gpg本身的退出代碼。





while-loop