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

时间:2018-04-18 00:25:55

标签: python command-line command-line-arguments argparse

我有一个名为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中将整个内容作为字符串?我希望能够打印到输出文件,使用什么参数运行什么命令。

3 个答案:

答案 0 :(得分:4)

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

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

请注意argv[0]是脚本名称。有关详细信息,请查看https://issuetracker.google.com/issues/78143615

答案 1 :(得分:3)

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

import sys

" ".join(sys.argv)

将返回类似/the/path/of/file/my_file.py arg1 arg2 arg3

的字符串

答案 2 :(得分:3)

这将与其中包含以空格分隔的字符串的命令一起使用。

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("\"", "\\\"")。为了简洁起见,我省略了它。