2011-06-02 67 views
2

開在下面的腳本執行結束後,我收到這樣的一些錯誤:文件中子殼

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) 

如何正確關閉文件?

謝謝。

回答

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) 
+0

謝謝。有用。 – superNobody 2011-06-03 09:11:43

0

您也可以使用此功能。

ss=subprocess.Popen(FileName,shell=True) 
ss.communicate()