传递给带有空格的json对象的变量被分解

时间:2018-07-18 15:27:43

标签: python json

这里有点束缚。我正在尝试将名为DATA的字典转储到json文件中。我在这本词典中有几个键,其中一个称为选项。我正在用Windows环境变量填充此词典,尽管那不要紧。这是我的代码:

TOOL = sys.argv[1]
TARGET = sys.argv[2]
HASH = sys.argv[3]
TESTCASE = sys.argv[4]
OPTIONS = sys.argv[5]

DATA = {'test': TOOL.replace("'", ""), 'target': TARGET.replace("'", ""),
        'HASH': HASH.replace("'", ""),
        'options': OPTIONS.replace("'", ""),
        'TESTCASE_EXECUTIONRECORD_NAME': TESTCASE.replace("'", "")}


def write_to_json():
    """Serialize cli args and tool options in json format.

    Write stream to json file.
    """
    with open(r'C:\Users\tommy12\PycharmProjects\SomethingNew\envs.json', 
    'w') as json_file:
    json.dump(DATA, json_file)


write_to_json()

我将使用以下命令运行程序

python jsonprogram.py %TOOL% %TARGET% 434999 test %OPTIONS%

以下是环境变量tool = 'nmap', target = 'scanme.nmap.org' and options = '-cA "-sS -p1-1000 "'

所有内容都会正确格式化选项。对于我的json选项值,我将只有-cA。我尝试在不同的地方使用引号,但没有任何帮助。有人知道如何保持选择权不变吗?我需要将选项格式设置为-cA“ -sS -p-1000”,并在其后的空格后面加上1000。双引号也是必需的。

2 个答案:

答案 0 :(得分:1)

双引号中的环境变量应保留空格(我在linux中对其进行了测试,并且可以正常工作):

python jsonprogram.py "%TOOL%" "%TARGET%" 434999 test "%OPTIONS%"

另一个答案(https://stackoverflow.com/a/1851129/10026557)似乎可以证实。

答案 1 :(得分:0)

我不确定这是否是您问题的完美答案,但是我对输入内容进行了简单的更改,但它确实有效。 原始输入

python test.py nmap scanme.nmap.org 434999 cA "-sS -p1-1000 "

更改输入

python test.py 'nmap' 'scanme.nmap.org' '434999' 'test' 'cA "-sS -p1-1000 "'