提问人:Reut 提问时间:9/27/2023 更新时间:9/28/2023 访问量:79
尝试在 bash 中读取带有日期对的元组列表使用 argparse 失败
Trying to read list of tuples with date-pairs in bash is failing using argparse
问:
我有python脚本,它的参数之一是元组列表:
def my_func(my_date_list: list=None, #List of dates to be used. Example for list : [('2017-07-02', '2017-08-15'),('2019-09-02', '2019-11-21')]):
...
当我从 Jupyter 笔记本运行它时,此函数有效。 但是,当我尝试在 bash 上运行它时,它无法真正正确访问日期。 这是我用 argparse + bash 命令所做的:
import ast
def parse_args():
'''Parser for my script '''
parser.add_argument('--date_list',type=str, default=None, required=False,
help=f"#List of dates to be used. Example for list : [('2017-07-02', '2017-08-15'),('2019-09-02', '2019-11-21')]")
args = parser.parse_args()
if args.date_list is not None:
date_list = ast.literal_eval(args.date_list)
print(date_list)
我的 bash 命令:
python3 main_func.py --date_list "[('2017-07-02','2020-03-02')]"
#this fails when the script gets to the part where it should worlk with the date
>>>end_date=date_range[LOC_1],
>>>IndexError: string index out of range
值得一提的是,这个脚本在从我的 Jupyter 笔记本运行时确实有效,所以我相信问题在于解析参数。
我正在寻找解决方案,了解如何在从 bash 运行脚本时使用日期列表参数。
答:
1赞
hpaulj
9/28/2023
#1
使用此脚本,从示例修改并添加了打印:
import ast
import argparse
import sys
def parse_args():
'''Parser for my script '''
parser = argparse.ArgumentParser()
parser.add_argument('--date_list',type=str, default=None, required=False,
help=f"#List of dates to be used. Example for list : [('2017-07-02', '2017-08-15'),('2019-09-02', '2019-11-21')]")
args = parser.parse_args()
print(args)
if args.date_list is not None:
date_list = ast.literal_eval(args.date_list)
print(date_list)
return date_list
print(sys.argv)
parse_args()
几个示例运行:
(base) C:\Users\14256\Downloads>
(base) C:\Users\14256\Downloads>python test.py
['test.py']
Namespace(date_list=None)
(base) C:\Users\14256\Downloads>python test.py --date_list "[('2017-07-02','2020-03-02')]"
['test.py', '--date_list', "[('2017-07-02','2020-03-02')]"]
Namespace(date_list="[('2017-07-02','2020-03-02')]")
[('2017-07-02', '2020-03-02')]
这不是 ,而是带有一些 Anaconda 路径设置的 Windows。但需要注意的关键事项bash
shell 和 在 中创建一个字符串列表。我们可以查看,甚至可以直接解析 - 无需使用,解析是直接的。
python
sys.argv
argparse
但正如 所定义的那样,这些字符串被分配给命名空间中的属性。不处理字符串。
add_argument
args
这里的处理取决于您的代码。
args.date_list
ast
已将该字符串解析为包含一个元组的列表。该元组包含两个字符串。
因此,可以对返回列表进行索引以获取这些字符串中的第二个。date_list[0][1]
对于一个好的问题,你需要展示(并理解)做什么和返回什么。您显示的错误涉及您未显示的代码:。我只能猜测这与 argparse 代码的关系。它看起来像一个字符串,因为它的措辞与以下人员生成的措辞相同:argparse
date_range[LOC_1]
date_range
'asstring'[20]
''[0]
评论
date_range
parse_args
parser
args.date_list
sys.argv