1
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)

gpg の出力を読み取る for ループ内に何かを作成する必要があります。gpg がこの文字列gpg: WARNING: message was not integrity protectedを出力するとき、ループを閉じて Success! を出力する必要があります。

どうすればこれを行うことができますか?その背後にある理由は何ですか?

みんな、ありがとう!

4

3 に答える 3

1

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
于 2012-10-10T03:10:42.113 に答える
0

以下を使用できるsubprocessモジュールを使用できます。

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 ステートメントを使用できます。

編集: Matthew Adams が以下で言及しているように、gpg 自体の終了コードを読み取ることもできます。

于 2012-10-10T03:10:53.030 に答える