2014-12-17 5 views
1

Я полностью смутил себя синтаксисом подпроцесса Python!Использование подпроцесса с openssl в скрипте python

Я хотел бы расшифровать строку, используя openssl из сценария Python.

Вот Баш скрипт, который сниппает работает:

readable_code=$(echo "$encrypted_code"| openssl enc -aes-128-cbc -a -d -salt -pass pass:$key) 

Так питон скрипт - Я понимаю, что для выполнения этой же команды Баша я должен использовать подпроцесс. Мне нужно пропустить эхо в команду openssl, а также динамически передавать в шифрованном_коде и ключевых переменных (в цикле).

Кто-нибудь знает правильный синтаксис для этого? Внизу снимок должен дать фон тому, что я пытаюсь сделать. благодарственное

import subprocess 

    key = "my-secret-key" 
    file = list_of_ips #format ip:long-encrypted-code 

with open(file_read) as f: 
    #read in all connecion requests 
    content=f.readlines() 
    #create list that will hold all ips whose decrypted codes have passed test 
    elements = [] 
    for ip_code in content: 
     #grab the ip address before the colon 
     ip = ip_code.split(':', 1)[0] 
     #grab the encrypted code after the colon 
     code = ip_code.split(':',1)[1] 

     #here is where I want to run the bash command and assign to a python variable 
     decrypted_code = subprocess....using code and key variables 
     ...on it goes.... 

ответ

0

Я настоятельно рекомендую вам использовать Plumbum библиотеку Python для написания скриптов. В частности, он имеет convenient way to do piping и redirection.

я не понял, какие именно задачи вы пытаетесь решить, но ваш код может выглядеть примерно так:

from plubum.cmd import openssl 

with open('file') as f: 
    for ip_code in f: 
     (openssl['whatever', 'params'] << ip_code)() 
+0

Hi Gill - это работает! спасибо за быстрый ответ. Heres my code: decrypted_code = (openssl ['enc', '-aes-128-cbc', '-a', '-d', '-salt', '-pass', 'pass:' + key] < JRD

1

Для имитации команды оболочки:

$ readable_code=$(echo "$encrypted_code"| openssl enc -aes-128-cbc -a -d -salt -pass "pass:$key") 

с помощью subprocess модуля in Python:

from subprocess import Popen, PIPE 

cmd = 'openssl enc -aes-128-cbc -a -d -salt -pass'.split() 
p = Popen(cmd + ['pass:' + key], stdin=PIPE, stdout=PIPE) 
readable_code = p.communicate(encrypted_code)[0] 
Смежные вопросы