Когда я использую 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
?