Как выполнить другой файл Python, а затем закрыть существующий? - PullRequest
1 голос
/ 03 июля 2019

Я работаю над программой, которая требует вызова другого скрипта Python и усечения выполнения текущего файла.Я попытался сделать то же самое с помощью функции os.close ().Следующим образом:

def call_otherfile(self):
    os.system("python file2.py") #Execute new script 
    os.close() #close Current Script 

Используя приведенный выше код, я могу открыть второй файл, но не могу закрыть текущий. Я знаю, что я глупая ошибка, но не могу понять, что это.

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

Для этого вам нужно будет запустить подпроцесс напрямую.Это может быть сделано либо с более низкоуровневой вилкой и моделью exec, как это принято в Unix, либо с высокоуровневым API, таким как subprocess.

import subprocess
import sys

def spawn_program_and_die(program, exit_code=0):
    """
    Start an external program and exit the script 
    with the specified return code.

    Takes the parameter program, which is a list 
    that corresponds to the argv of your command.
    """
    # Start the external program
    subprocess.Popen(program)
    # We have started the program, and can suspend this interpreter
    sys.exit(exit_code)

spawn_program_and_die(['python', 'path/to/my/script.py'])

# Or, as in OP's example
spawn_program_and_die(['python', 'file2.py'])

ТакжеПросто заметка о вашем исходном коде.os.close соответствует системному вызову Unix close, который сообщает ядру, что вашей программе вам больше не нужен дескриптор файла.Он не должен использоваться для выхода из программы.

Если вы не хотите определять свою собственную функцию, вы всегда можете просто вызвать subprocess.Popen напрямую, как Popen(['python', 'file2.py'])

0 голосов
/ 03 июля 2019

Используйте модуль подпроцесс , который является предлагаемым способом выполнения такого рода вещи (выполнить новый сценарий, процесс), в частности посмотрите на Popen для запуска нового процесса и для завершить текущую программу, которую вы можете использовать sys.exit () .

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