我想從base64編碼的aws中提取數據。我需要通過base64 -D輸出輸出以使其可讀。當我沒有管道的base64參數運行的代碼返回輸出沒有問題,但是,輸出是不可讀:Python傳遞管道'|'在Popen中的參數
import subprocess
import shlex
aws_read_report = "aws iam get-credential-report --query 'Content' --output text"
args_read = shlex.split(aws_read_report)
proc_read = subprocess.check_output(args_read)
print proc_read
然而,當我加入|的base64 -D參數爲這樣:
aws_read_report = "aws iam get-credential-report --query 'Content' --output text | base64 -D"
我得到以下錯誤:
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
要查看幫助信息,您可以運行:
aws help
aws <command> help
aws <command> <subcommand> help
Unknown options: base64, -D, |
Traceback (most recent call last):
File "cmd_aws.py", line 12, in <module>
proc_read = subprocess.check_output(args_read)
File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 574, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['aws', 'iam', 'get-credential-report', '--query', 'Content', '--output', 'text', '|', 'base64', '-D']' returned non-zero exit status 255
另外,作爲一個方面說明,當我直接從命令行運行命令我得到我想要的結果:
aws iam get-credential-report --query 'Content' --output text | base64 -D
看起來好像'|'正在拋棄一些東西。
重定向/管道是由外殼或製造/ bash的,所以你必須使用'殼= TRUE;你有使用一個'suprocess'從'aws'獲取數據,然後使用'base64'獲取數據 - 而且必須手動從第一個'suprocess'獲取數據併發送到第二個'subprocess'。 – furas