如何在python的子进程调用期间阻止stdout显示我的密码

时间:2014-03-06 22:50:52

标签: python subprocess

我想阻止运行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')

此类工作正常,但文件执行完毕之前,文件不会被删除。 还有其他方法吗?

1 个答案:

答案 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)