簡體   English   中英

Python傳遞管道的'|' Popen中的參數

[英]Python passing a piped '|' argument in Popen

我正在嘗試從base64編碼的aws中提取數據。 我需要通過base64 -D傳遞輸出,以使其可讀。 當我運行不帶管道的base64參數的代碼時,它不會返回任何輸出,但是,輸出不可讀:

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

好像“ |” 正在扔東西。

為了使管道正常工作,您需要將shell=True傳遞給subprocess.check_output()調用: docs

或者,您可以進行自己的base64解碼: https : //docs.python.org/2/library/base64.html

I / O重定向是Shell功能。 為subprocess.check_output()提供執行執行的參數序列是很好並且安全的,但是您在這里還需要其他內容。 因此,請勿拆分命令行,並讓Shell執行應做的事情:

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

如果至少是Linux,我認為shell = True存在安全問題。 無論如何,這是另一個幫助您完成此工作的鏈接: https : //docs.python.org/3/library/subprocess.html#replacing-shell-pipeline

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM