subprocess.Popenを使用している場合、私は(例えば)スクリプトtest1.pyを持っている別のスクリプト
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()
を実行するためにPythonが二回に問題があることであるファイルを開きます2番目のスクリプトを起動すると、ファイル "File.txt"が再び開きます。起動時の2番目のスクリプトがファイルを開くのはなぜですか?
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を設定する必要があります。 – deniska369