как сохранить вывод (файл json) подпроцесса, который находится в цикле - PullRequest
1 голос
/ 15 мая 2019

при отправке этого кода генерируется случайный файл json с предоставленными идентификаторами пользователя и диапазоном между прочим.

, поэтому этот код выводит 50 jsons для каждого пользователя.

import faker
import json
from faker import Faker
import random
from random import randint
import subprocess
import json
import os
#subprocess.call([""])
from pprint import pprint

ids= ('5cda','6cda')

fake = Faker('en_US')

for ind in ids:
    cont = []
    #Overall dictionary with first and user_ids
    dct = {}
    for idx in range(50):

        sms =  {
            "id":"AB-asfgw",
            "body": fake.text(),
            "mime": fake.ean(),
            "hashed": fake.ean(),
            "pid": fake.ean(),
            "user_id": ind,
            "text": fake.sentence()
        }
        cont.append(sms)

    dct['messages'] = cont
    dct['user_id'] = ind
    #print(dct)
    f_name = '{}.json'.format(ind)
    with open(f_name, 'w') as fp:
        #Save the dictionary
        json.dump(dct, fp, indent=4)
        print('saved {}'.format(f_name))    

auth = "authorization: token 1324"
file = "5cda.json"
fd=open("5cda.json")
json_content = fd.read()
fd.close()


subprocess.run(["grpcurl", "-plaintext","-H", auth,"-d",json_content,"-format","json","100.20.20.1:5000","api.Service/Method"])


этот цикл.py код повторяет первый код 20 раз

from datetime import datetime
import faker
import json
from faker import Faker
import random
from random import randint
import subprocess
import json
import os
#subprocess.call([""])
from pprint import pprint
import subprocess
import sys



for i in range(20):
    subprocess.call(['python','grploop1.py'])

мне нужно сохранить выходные данные кода loop.py для каждого цикла.и сохранить этот JSON.пример: мы зацикливаем первый код в loop.py 20 раз, так что вывод должен быть примерно таким: 5cda1.json ........ 5cda20.json и 6cda1.json ..... 6cda20.json

здесь мы даем два идентификатора пользователя ids= ('5cda','6cda'), поэтому на выходе будет всего 40 файлов json.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вы можете сохранить вывод вызываемого файла python в файл, если вы записали J-son в STDOUT и в loop.py перенаправили STDOUT в файл.В вашем файле «генератора»: (Конечно, вы должны удалить другие отпечатки, если вы не хотите получать недопустимый файл J-son.)

...
dct['messages'] = cont
dct['user_id'] = ind
print(dct)
...

Ваш файл loop.py:

subprocess.call(["ardbuf", "-oL", "python","grploop1.py", ">", test_folder/tmp_file.json])
0 голосов
/ 15 мая 2019

Вы хотели бы поместить логику сохранения файла в циклы for ind in ids: и использовать индекс в общем цикле для сохранения файла с разными именами.

import faker
import json
from faker import Faker
import random
from random import randint
import subprocess
import json
import os
#subprocess.call([""])
from pprint import pprint

ids= ('5cda','7f36')

fake = Faker('en_US')

msg_list = []

#Overall loop to run inner loop 20 times
for i in range(20):
    #Loop to generate messages
    for ind in ids:
        cont = []
        #Overall dictionary with first and user_ids
        dct = {}
        for idx in range(20):


            sms =  {
                "id":"AB-Iasd",
                "body": fake.sentence(),
                "reae": fake.ean(),
                "ashe": fake.ean(),
                "id2": fake.ean(),
                "user_id": ind,
                "pid": fake.sentence()
            }
            cont.append(sms)
        #Use a dictionary to save cont list to first key, and ind to user_ids key
        dct['messages'] = cont
        dct['user_id'] = ind
        msg_list.append(dct)

        #Append the index to the file here, and save the file
        f_name = '{}{}.json'.format(ind,i+1)
        with open(f_name, 'w') as fp:
            # Save the dictionary
            json.dump(dct, fp, indent=4)
            print('saved {}'.format(f_name))

Вы получите 40 файлов каксогласно вашим требованиям, с уникальным содержанием во всех файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...