我在一个接收不同类型参数的文件中有一个函数(int,strings,dictionaries,lists ...)
通常我从另一个函数调用此函数,传递正确的参数,但我也希望能够从控制台调用它(用于测试目的)
问题是输入参数存储为字符串,所以我不能直接将它们传递给函数。
有没有办法自动将参数从控制台传递给保持正确格式的函数?
import sys
def myfunction(mystring, myint, mydict, mylist):
# check that types are correct
assert type(mystring) is str
assert type(myint) is int
assert type(mydict) is dict
assert type(mylist) is list
# print input parameters
print mystring
print myint
print mydict
print mylist
def main(args):
print args
myfunction(*args) # pass the parameters to the function
if __name__ == '__main__':
main(sys.argv[1:]) # discard 1st element which is the filename
要从控制台调用我的功能,我只需:
python myfile.py "hello" 5 {'age':30} [1,2,3,4]
第一次assert
成功,因为它需要一个字符串,但第二个失败,因为它需要一个int。
main函数中的print args
返回['hello', '5', '{age:30}', '[1,2,3,4]']
(因此参数已被正确解析,但它们存储为字符串)。
我只需要将它们转换为正确的格式。
有什么想法吗?
答案 0 :(得分:1)
您可以将它们作为python列表传递:
python myfile.py "['hello',5,{'age':30},[1,2,3,4]]"
然后使用ast.literal_eval
import ast,sys
if __name__ == '__main__':
args = ast.literal_eval(sys.argv[1])
main(args)
现在args
是值list
['hello', 5, {'age': 30}, [1, 2, 3, 4]]
要在shell(windows,Linux)之间真正移植,首选上述方法:双引号保护参数,简单引号保护字符串。反过来使用Linux / MSYS shell而不是Windows(单引号在Windows中不是真正的引用)