Python: запустить несколько сценариев из родительского сценария, где вы также можете установить значения переменных - PullRequest
0 голосов
/ 01 октября 2019

У меня есть несколько файлов Python, которые я хочу выполнить последовательно, чтобы получить вывод, и теперь хотел бы автоматизировать этот процесс. Поэтому я хотел бы иметь родительский скрипт, из которого я могу выполнить все свои дочерние скрипты в правильном порядке. Кроме того, я хотел бы выполнить один из файлов дважды, но с двумя разными переменными даты, и хотел бы сохранить выходные данные в двух разных папках. Как мне создать такой родительский скрипт в Python?

Например, сначала я хочу выполнить file1.py, а дата (переменная в file1.py) должна быть date1, а выходные данные должны быть сохранены вdir1 и затем я хочу снова выполнить file1.py, но на этот раз дата должна быть date2, а вывод должен быть в dir2. И я хочу выполнить file2.py. Как бы я это сделал?

1 Ответ

0 голосов
/ 01 октября 2019

Вы можете легко запускать скрипты Python из других скриптов Python, используя подпроцессы. Что-то вроде:

import subprocess
subprocess.Popen("script2.py some_argument")

Проблема с использованием подпроцессов - довольно неприятно получать результаты из него (вы можете распечатать результаты из скрипта и затем получить их в родительском файле, но все же).

Лучшее решение - сохранить промежуточные результаты в некоторой базе данных (например, в простом файле SQLite), чтобы вы использовали основной сценарий для запуска дочерних сценариев, но при этом получали аргументы из базы данных и записывали результаты дочерних сценариев в базу данных. Это довольно просто и может решить ваши проблемы (https://docs.python.org/3/library/sqlite3.html).

Например, чтобы сохранить некоторую переменную в базе данных SQLite, все, что вам нужно:

import sqlite3

conn = sqlite3.connect("mydatabase.db")
cursor = conn.cursor()

# Create table (no need if it was created before)
cursor.execute("""CREATE TABLE example_table
                  (variable_name, variable_value)
               """)
# Save changes
conn.commit()

# Insert data
cursor.execute("""INSERT INTO example_table
                  VALUES ('some_variable', 'some_value')"""

# Save changes
conn.commit()
...