首页 > 解决方案 > 如何将python命令行参数保存到日志文件?

问题描述

我有一个 python 脚本test.py,它有几十个参数/标志:--flag1, --flag2, ..., --flagn. 为了运行它,我执行如下命令

python test.py --flag1 value1 --flag3 value3 --flag8 value8

在这种情况下,我想将完全相同的输入行保存到日志文件中。在上面的例子中,我想要一个log.txt只包含一行的:

python test.py --flag1 value1 --flag3 value3 --flag8 value8

因为这个脚本有几十个标志,其中一些默认为一​​些值,我只关心用户的输入是什么,我不需要任何关于用户没有直接指定的其他参数的默认值的信息.

如何创建这样的日志文件,其中包含用户键入的完全相同的行?

标签: pythonshellcommand-line-arguments

解决方案


您可以使用sys.argv捕获传递给脚本的所有参数:

传递给 Python 脚本的命令行参数列表。

例如:

import sys
print(sys.argv)
print(" ".join(sys.argv))

当您将一些参数传递给此脚本时,例如:

my_script.py --foo --bar

它会打印

['my_script.py', '--foo', '--bar']
my_script.py --foo --bar

更新:当带空格的引号字符串作为参数传递时,这不会打印@PeterMoore 提到的命令行的精确副本,因为在 Python 有机会检查它们之前,您的 shell 将删除引号。一个简单的解决方法可能是:

print(" ".join(f"'{i}'" if " " in i else i for i in sys.argv))

如果你也想包含 Python 可执行文件,你可以使用sys.executable

>>> print(sys.executable)
/usr/bin/python

推荐阅读