在执行以下脚本结束时,我收到一些错误:
filename.enc: No such file or directory
140347508795048:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('filename.enc','r')
140347508795048:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
似乎Popen试图在执行结束时关闭文件,尽管它已被删除。
#!/usr/bin/python
import subprocess, os
infile = "filename.enc"
outfile = "filename.dec"
opensslCmd = "openssl enc -a -d -aes-256-cbc -in %s -out %s" % (infile, outfile)
subprocess.Popen(opensslCmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
os.remove(infile)
如何正确关闭文件?
感谢。
答案 0 :(得分:3)
这听起来像你的子进程执行,但由于它是非阻塞的,你的os.remove(infile)
会立即执行,在子进程完成之前删除文件。
您可以使用subprocess.call()
代替命令完成。
...或者您可以更改代码以使用wait()
:
p = subprocess.Popen(opensslCmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
p.wait()
os.remove(infile)
答案 1 :(得分:0)
您可以尝试在线程中运行subprocess.Popen,并在子进程调用返回后删除该文件。
答案 2 :(得分:0)
你也可以使用它。
ss=subprocess.Popen(FileName,shell=True)
ss.communicate()