问题描述
我不想在子流程执行完成之前删除临时文件,因此,我调用子流程脚本为:
import os
import tempfile
import subprocess
def main():
with tempfile.NamedTemporaryFile("w",delete=False) as temp:
temp.write("Hello World")
temp.flush()
print(f"Temp file is: {temp.name}")
args = ["python3",os.path.dirname(__file__) + "/hello_world.py","--temp-file",temp.name]
subprocess.Popen(args)
return
main()
hello_world.py
import argparse
import sys
def print_hello():
print("Hello World")
return
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="""Test case""")
parser.add_argument('--temp-file',required=True,help='For test')
args = parser.parse_args()
print(args)
print_hello()
sys.exit(0)
解决方法
调用 subprocess.Popen()
会启动进程,但不会等待它完成。
如果您想在退出 with
块之前等待进程完成,您可以改用 subprocess.run()
。
编辑:根据您的评论,您不想等待该过程完成。由于您使用delete=False
创建文件,因此在with
块末尾关闭文件指针时不会删除该文件,因此您需要手动删除路径,无论是在父进程或子进程。