У меня есть сценарий test1.py (к примеру)Python дважды открывает файл, если используется subprocess.Popen для запуска другого сценария
import test2
def main():
f = open("File.txt")
test2.run()
while True:
pass
if __name__ == '__main__':
main()
И test2.py
import subprocess, sys, os
def run():
# Self run
subprocess.Popen(['C:\\Windows\\System32\\cmd.exe', '/C', 'start',
sys.executable, os.path.abspath(__file__)])
def main():
while True:
pass
if __name__ == '__main__':
main()
Проблема заключается в том, что запуск второго скрипта снова откроет файл «File.txt». Почему второй скрипт при запуске открывает файл?
D:\test>Handle.exe File.txt
Handle v4.0
Copyright (C) 1997-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
python.exe pid: 9376 type: File 29C: D:\test\File.txt
python.exe pid: 9792 type: File 29C: D:\test\File.txt
Я привел простой пример, для инструкций моих проблем. Мой код немного сложнее, поэтому я не могу закрыть файл перед форкингом. Можно ли подавить дочерний процесс наследовать файловый дескриптор? – deniska369
Подпроцесс может закрыть его, если вы ожидаете, что он будет длительным процессом, и если несколько обработок файлов вызывают дополнительную проблему. – Owen
Хорошо, я нашел решение. Нужно установить close_fds = True в подпроцессе.Popen. Большое спасибо за ваш ответ – deniska369