Python命令行能否将函数作为参数传入?例如datetime.date.now()
问题解答:命令行传递Python日期函数表达式的可行性
直接执行py code.py -p1 a -p2 b -p3 datetime.date.now()是不行的,因为命令行传递的所有参数本质都是字符串,Python脚本接收后只会把"datetime.date.now()"当作普通文本,不会自动解析执行这个表达式。
下面是几种可行的替代方案,能满足你传入动态日期的需求:
方案1:脚本内部识别特殊标记,自动生成当前日期
在命令行传入约定的标记(比如now),脚本内部判断后调用datetime.date.now():
命令行执行:
py code.py -p1 a -p2 b -p3 now
脚本code.py示例:
import argparse import datetime parser = argparse.ArgumentParser() parser.add_argument('-p1', required=True) parser.add_argument('-p2', required=True) parser.add_argument('-p3', required=True) args = parser.parse_args() # 处理日期参数 if args.p3 == "now": target_date = datetime.date.now() else: # 兼容手动传入日期字符串的情况,比如"2024-05-20" try: target_date = datetime.datetime.strptime(args.p3, "%Y-%m-%d").date() except ValueError: raise ValueError("p3参数格式错误,需传入'now'或YYYY-MM-DD格式的日期字符串") print(f"处理日期:{target_date}")
方案2:直接传递格式化后的日期字符串
如果需要指定特定日期(或当前日期),可以在命令行直接传递YYYY-MM-DD格式的字符串,脚本内部解析:
命令行执行(不同系统获取当前日期的方式):
# Windows cmd下 py code.py -p1 a -p2 b -p3 %date:~0,4%-%date:~5,2%-%date:~8,2% # PowerShell下 py code.py -p1 a -p2 b -p3 $(Get-Date -Format "yyyy-MM-dd") # Linux/macOS下 python3 code.py -p1 a -p2 b -p3 $(date +%Y-%m-%d)
脚本解析部分和方案1的else分支一致,用strptime将字符串转为date对象即可。
方案3:通过Shell预执行Python表达式传递结果
如果一定要在命令行直接写datetime.date.now(),可以让Shell先执行这个Python代码并输出结果,再把结果作为参数传递给脚本:
命令行执行(PowerShell或类Unix终端):
# PowerShell py code.py -p1 a -p2 b -p3 $(python -c "import datetime; print(datetime.date.now())") # Linux/macOS python3 code.py -p1 a -p2 b -p3 $(python3 -c "import datetime; print(datetime.date.now())")
这种方式下,Shell会先运行python -c "..."得到当前日期字符串(比如2024-05-20),再将这个字符串作为-p3的参数传给你的脚本,脚本内部直接解析即可。
内容的提问来源于stack exchange,提问作者Benjanamin
相关产品推荐
相关产品推荐

