我在使用Python的subprocess.Popen一个很奇怪的问题。我用它来拨打几遍外部exe文件,并保持输出在列表中。

每次调用这个外部exe文件,它将返回不同的字符串。但是,如果我把它用POPEN几次,它总是会返回相同的字符串。 =: - 0

它看起来像POPEN总是返回从标准输出相同的值,而不回顾的exe。也许做某种形式的缓存,而无需实际再次调用exe文件。

这是我的代码:

def get_key():

    from subprocess import Popen, PIPE

    args = [C_KEY_MAKER, '/26', USER_NAME, ENCRYPTION_TEMPLATE, '0', ]
    process = Popen(args, stdout=PIPE)
    output = process.communicate()[0].strip()
    return output

if __name__ == '__main__':
    print get_key() # Returns a certain string
    print get_key() # Should return another string, but returns the same!

在地球上我在做什么错?!

有帮助吗?

解决方案

有可能(如果C_KEY_MAKER的随机行为是基于以秒为当前时间,或类似),当你在命令行中运行它两次,时间已经运行之间改变了,所以你得到不同的结果,但当蟒运行它,它运行两次以这样快速连续,时间没有改变,所以它在连续两次返回相同的值。

其他提示

无。这(在底部除了您的压痕错误)工作正常,在我自己的测试。问题是,无论是在你的exe文件。或其它地方。

要澄清,我创建一个python程序tfile.py

cat > tfile.py
#!/usr/bin/env python
import random
print random.random()

然后改变程序里边反摆脱底部的缺口问题,并呼吁tfile.py。它没有给出两个不同的结果。

我不知道什么是你的榜样去错了,我不能复制这种行为,但是尝试更由这本书的方法:

def get_key():

    from subprocess import Popen, PIPE

    args = [C_KEY_MAKER, '/26', USER_NAME, ENCRYPTION_TEMPLATE, '0', ]
    output = Popen(args, stdout=PIPE).stdout
    data = output.read().strip()
    output.close()
    return data

您的代码不能执行,因为是所以很难来帮助你了。考虑固定缩进和语法,并使其自成一体,这样我们就可以给它一个尝试。

在Linux中,这似乎根据德文Jeanpierre很好地工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top