我想阻止运行suprocess.call()时可见的输出。
这是我想要停止的唯一输出,因为我需要运行后显示的命令。
该调用显示我的密码,我将其设置为系统变量,在执行的文件中隐藏为%% mypassword %%(但是,它显示在命令行界面中)。
from subprocess import call
with open('//path/pwhold.txt','w') as pwhold:
call(r"\\filetorun\%s.bat" % DB,stdout=pwhold)
os.unlink('//path/pwhold.txt')
此类工作正常,但文件执行完毕之前,文件不会被删除。 还有其他方法吗?
答案 0 :(得分:1)
Per Sebastion的评论。 subprocess.call()使用的接口需要实际的文件句柄才能捕获OS级别的输出。执行命令时,尝试使用字符串或字符串缓冲区失败。
IGNORE:这不起作用。 将STDOUT重定向到字符串而不是文件。这样,您的信息只会出现在内存中。请参阅此问题Can I redirect the stdout in python into some sort of string buffer?。
TLDR: 使用:
from cStringIO import StringIO
import sys
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
OR
from io import TextIOWrapper, BytesIO
# setup the environment
old_stdout = sys.stdout
sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)