使用 Python 访问 aws ecr 时出现参数错误
argument errors when using using Python to access to aws ecr
函数如下:
def sh(*command, read_output=False, **kwargs):
command_text = " ".join(command)
print(f"\t> {command_text}")
try:
if read_output:
return check_output(command, **kwargs).decode("utf8")
else:
check_call(command, **kwargs)
except CalledProcessError as failure:
print(
f'ERROR: "{command_text}" command reported failure! Return code {failure.returncode}.'
)
sys.exit(failure.returncode)
我正在尝试使用此功能先获取 aws erc get-login,然后使用返回的登录命令登录 aws erc。这是我的代码:
result = sh('aws', 'ecr', 'get-login', '--no-include-email', read_output=True)
re = result.split()
sh(re)
然后我得到错误:
command_text = " ".join(command)
TypeError: sequence item 0: expected str instance, list found
我认为 sh
函数期望参数类似于 `('docker', 'login', '-u', 'AWS', '-p'... ), 但我怎样才能做到这一点?
您可以使用 *
解压 list/tuple 并函数获取尽可能多的参数
sh( *re )
或者您可以在定义
中从*command
中删除*
def sh(command, ...)
然后您只能将其发送为 list/tuple
sh( re )
但您也可以检查 command
是 list
还是 string
if isinstance(command, str):
command_text = command
elif isinstance(command, list, tuple):
command_text = " ".join(command)
这样你就可以直接把它作为一个字符串发送了。
sh( 'aws ecr get-login --no-include-email' )
或带字符串的列表
sh( ['aws', 'ecr', 'get-login', '--no-include-email'] )
顺便说一句:类似的方式适用于 **
字典和命名参数
def fun(a=0, b=0, c=0):
print('a:', a)
print('b:', b)
print('c:', c)
data = {'b':2}
fun(**data)
函数如下:
def sh(*command, read_output=False, **kwargs):
command_text = " ".join(command)
print(f"\t> {command_text}")
try:
if read_output:
return check_output(command, **kwargs).decode("utf8")
else:
check_call(command, **kwargs)
except CalledProcessError as failure:
print(
f'ERROR: "{command_text}" command reported failure! Return code {failure.returncode}.'
)
sys.exit(failure.returncode)
我正在尝试使用此功能先获取 aws erc get-login,然后使用返回的登录命令登录 aws erc。这是我的代码:
result = sh('aws', 'ecr', 'get-login', '--no-include-email', read_output=True)
re = result.split()
sh(re)
然后我得到错误:
command_text = " ".join(command)
TypeError: sequence item 0: expected str instance, list found
我认为 sh
函数期望参数类似于 `('docker', 'login', '-u', 'AWS', '-p'... ), 但我怎样才能做到这一点?
您可以使用 *
解压 list/tuple 并函数获取尽可能多的参数
sh( *re )
或者您可以在定义
中从*command
中删除*
def sh(command, ...)
然后您只能将其发送为 list/tuple
sh( re )
但您也可以检查 command
是 list
还是 string
if isinstance(command, str):
command_text = command
elif isinstance(command, list, tuple):
command_text = " ".join(command)
这样你就可以直接把它作为一个字符串发送了。
sh( 'aws ecr get-login --no-include-email' )
或带字符串的列表
sh( ['aws', 'ecr', 'get-login', '--no-include-email'] )
顺便说一句:类似的方式适用于 **
字典和命名参数
def fun(a=0, b=0, c=0):
print('a:', a)
print('b:', b)
print('c:', c)
data = {'b':2}
fun(**data)