Python的subprocess.Popen返回相同的标准输出,即使它不应该
-
23-08-2019 - |
题
我在使用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很好地工作。
不隶属于 StackOverflow