我的Python subprocess.Popen有一个非常奇怪的问题。我用它来调用外部exe几次并将输出保存在列表中。
每次调用此外部exe时,它都会返回不同的字符串。但是,如果我使用Popen多次调用它,它将始终返回相同的字符串。 =: - O
看起来Popen总是从stdout返回相同的值,而没有回忆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!
地球上我做错了什么?!
答案 0 :(得分:3)
有可能(如果C_KEY_MAKER
的随机行为基于当前时间(以秒为单位)或类似情况),当您在命令行上运行两次时,运行之间的时间已经改变,所以你得到一个不同的输出,但是当python运行它时,它会快速连续运行两次,时间没有改变,所以它连续两次返回相同的值。
答案 1 :(得分:1)
无。这在我自己的测试中工作正常(除了底部的缩进错误)。问题出在你的exe上。或其他地方。
为了澄清,我创建了一个python程序tfile.py
cat > tfile.py
#!/usr/bin/env python
import random
print random.random()
然后改变程序以消除底部的缩进问题,并调用tfile.py。它确实给出了两个不同的结果。
答案 2 :(得分:1)
我不知道你的例子出了什么问题,我无法复制这种行为,但是尝试更多的书本方法:
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
答案 3 :(得分:0)
您的代码不可执行,因此很难帮助您。考虑修复缩进和语法并使其自包含,以便我们可以试一试。
在Linux上,根据Devin Jeanpierre的说法,似乎工作正常。