python argparse 如何将整个命令作为字符串

python argparse how to get entire command as string

我有一个名为 patchWidth.py 的脚本,它使用 argparse:

解析命令行参数
# read command line arguments -- the code is able to process multiple files
parser = argparse.ArgumentParser(description='angle simulation trajectories')
parser.add_argument('filenames', metavar='filename', type=str, nargs='+')
parser.add_argument('-vec', metavar='v', type=float, nargs=3)

假设此脚本 运行 具有以下内容:

>>> python patchWidth.py file.dat -vec 0. 0. 1.

有没有办法在 python 中将整个内容作为字符串获取?我希望能够将什么命令 运行 和什么参数打印到输出文件。

是的,您可以使用 sys 模块:

import sys
str(sys.argv) # arguments as string

注意argv[0]是脚本名。有关详细信息,请查看 sys module documentation.

我不知道这是否是最佳选择,但是...

import sys

" ".join(sys.argv)

会不会return一个像/the/path/of/file/my_file.py arg1 arg2 arg3

这样的字符串

这将适用于其中包含 space 分隔字符串的命令。

import sys
" ".join("\""+arg+"\"" if " " in arg else arg for arg in sys.argv)

示例输出:

$ python3 /tmp/derp.py "my arg" 1 2 3
python3 /tmp/derp.py "my arg" 1 2 3

如果其中有一个带引号的字符串参数,这将不起作用,要解决这个问题,您必须像这样分隔引号:arg.replace("\"", "\\"")。为了简洁起见,我将其省略。