2017-01-25 29 views
0

我想從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 

看起來好像'|'正在拋棄一些東西。

+0

重定向/管道是由外殼或製造/ bash的,所以你必須使用'殼= TRUE;你有使用一個'suprocess'從'aws'獲取數據,然後使用'base64'獲取數據 - 而且必須手動從第一個'suprocess'獲取數據併發送到第二個'subprocess'。 – furas

回答

1

I/O重定向是一個shell功能。雖然提供一系列參數用於執行subprocess.check_output(),但您還是需要別的東西。所以,不拆你的命令行,並讓殼做它應該做的,如:

proc_read = subprocess.check_output("aws iam get-credential-report --query 'Content' --output text | base64 -D", shell=True)

+0

不錯,那給了我我正在尋找的結果。 – Isaiah