如何在Python中获取脚本的精确调用命令行并写入文件?
Python 脚本记录调用命令行的等价实现
要实现和bash中echo "$0" "$@" > "${output_dir}/configuration/invocation.txt"类似的功能,Python可以借助sys.argv获取命令行参数,具体实现如下:
基础实现代码
import sys import os # 替换为你的实际输出目录路径 output_dir = "./output" conf_dir = os.path.join(output_dir, "configuration") # 自动创建不存在的目录 os.makedirs(conf_dir, exist_ok=True) invocation_file = os.path.join(conf_dir, "invocation.txt") # 拼接命令行并写入文件 with open(invocation_file, "w") as f: f.write(" ".join(sys.argv))
重要注意事项
和bash的实现一样,Python通过sys.argv拿到的参数已经经过shell的预处理,原始命令中的引号、空格等格式无法精确还原。举个例子:如果用户调用时输入python my_script.py "hello world" --flag,sys.argv会返回['my_script.py', 'hello world', '--flag'],拼接后写入的内容是my_script.py hello world --flag,丢失了原有的双引号。
这是因为shell在启动Python进程前就已经解析了命令行的引号和空格,把拆分后的参数传递给Python,原始的命令行字符串并不会被保留下来,所以无论bash还是Python,都无法完全还原用户输入的原始命令格式。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

