我想将 pycosat 的详细输出存储到一个字符串中:
import pycosat
cnf = [[1, -5, 4], [-1, 5, 3, 4], [-3, -4]]
pycosat.solve(cnf,verbose=5)
我找到了各种解决方案,例如 Capture stdout from a script in Python
但是基于 stringIO() 的解决方案不捕获 pycosat 输出。输出正常打印,并捕获一个空字符串。
我认为这与 pycosat 绑定(bind)到 c-library picosat 这一事实有关,但我不知道如何处理。
这个解决方案也行不通 https://stackoverflow.com/a/29834357/4270148
Python 将卡住在
out.stop()
ipython 也会卡住在
sys.stdout = StringIO()
这可能与它有关。
我没有尝试使用使用子进程的解决方案,因为我需要局部变量 cnf,将它传递给子进程没有任何意义。
我不知道它是否应该相关,但我在 osx-64 上使用 conda 3.14.1
最佳答案
子流程解决方案在这里找到 https://stackoverflow.com/a/5136686/4270148 , 确实有效!
import subprocess
proc = subprocess.Popen(["python", "-c",
"cnf = [[1, -5, 4], [-1, 5, 3, 4], [-3, -4]];\
import pycosat;\
pycosat.solve(cnf,verbose=5);"],
stdout=subprocess.PIPE)
out = proc.communicate()[0]
我不喜欢程序传递的方式(作为 eval 字符串),但至少它有效。
关于python - 从 python 中的 c 模块捕获打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212863/