Когда я использую os.system(), чтобы открыть файл.py в Python, он автоматически закрывает его немедленно. Как это исправить?

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

я пробовал execfile() но файл не открывается. Когда я использую os.system(somefile.py) он успешно открывает.py файл через консоль, но сразу же закрывает его. Существуют ли альтернативы, чтобы я мог запустить скрипт Python внутри основного скрипта Python, но оба процесса выполнялись одновременно, не конфликтуя друг с другом?

Вот пример кода, который я тестировал:

import os
file_path = 'C:\\Users\\Tyler\\Documents\\Multitask Bot\\somefile.py'

def main():
    os.system(file_path)

if __name__ == '__main__':
    main()

3 ответа

execfile() а также os.system() будет блокировать родительский процесс, пока ребенок не выйдет. использование subprocess.Popen()например,

import subprocess, time
file_path = 'C:\\Users\\Tyler\\Documents\\Multitask Bot\\somefile.py'

def main():
    child = subprocess.Popen(['python', file_path])
    while child.poll() is None:
        print "parent: child (pid = %d) is still running" % child.pid
        # do parent stuff
        time.sleep(1)
    print "parent: child has terminated, returncode = %d" % child.returncode

if __name__ == '__main__':
    main()

Это всего лишь один из способов справиться с этим. Вы можете получить stdout и / или stderr у ребенка и, возможно, отправить данные в stdin ребенка. Читайте о модуле подпроцесса.

Если вы хотите запустить другой скрипт одновременно, рассмотрите модуль подпроцесса.

Ваша проблема может быть в том, что этот файл не выполняется в C:\\Users\\Tyler\\Documents\\Multitask Bot\\но где-то еще. Локальный импорт может потерпеть неудачу.

не могли бы вы попробовать выполнить os.chdir('C:\\Users\\Tyler\\Documents\\Multitask Bot\\') до os.system?

Другие вопросы по тегам