Python新手,无法让它发挥作用。我需要生成一个openSSL进程。这就是我所拥有的:
from subprocess import call
cmd = "openssl aes-128-cbc -d -in ciphertext -base64 -pass pass:test123"
decrypted = call(cmd)
print (decrypted)
这甚至都不会编译。我得到TypeError: 'function' object is not subscriptable
谁能告诉我怎么做到这一点?感谢。
顺便说一句,当我只是将我的cmd字符串键入终端时,它可以正常工作。
编辑:我将行decrypted = call[cmd]
更改为decrypted = call(cmd)
。当我这样做时,我得到了一系列错误:
Traceback (most recent call last):
..., line 14, in <module>
plaintext = call(cmd)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py", line 523, in call
with Popen(*popenargs, **kwargs) as p:
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py", line 817, in __init__
restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/subprocess.py", line 1441, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'openssl aes-128-cbc -d -in test.enc -base64 -pass pass:hello'
答案 0 :(得分:3)
你使用paranthesis而不是方括号
即:
decrypted = call(cmd)
更一般地说,您使用括号将参数包装在python(以及大多数其他主流语言)中的函数调用中。
此外,默认情况下,call将第一个参数视为要运行的可执行文件,不带任何参数。您还需要传递shell=True
,或者将命令拆分为数组并传递它。
decrypted = call(cmd, shell=True) #execute command with the shell
# or
decrypted = call(['openssl', 'aes-128-cbc', '-d', '-in', 'ciphertext', '-base64', '-pass', 'pass:test123'])
一般情况下,后者是首选,因为它会为你逃避,并且在不同的贝壳之间更容易携带。