小编Kri*_*hev的帖子

带有ctypes的stdout重定向

我正在尝试将printf函数的输出重定向到Windows上的文件.我正在使用python3的ctypes来调用函数.我的代码是:

import os, sys
from ctypes import *

if __name__ == '__main__':

 print("begin")
 saved_stdout=os.dup(1)
 test_file=open("TEST.TXT", "w")
 os.dup2(test_file.fileno(), 1)
 test_file.close()
 print("python print")
 cdll.msvcrt.printf(b"Printf function 1\n")
 cdll.msvcrt.printf(b"Printf function 2\n")
 cdll.msvcrt.printf(b"Printf function 3\n")
 os.dup2(saved_stdout, 1)
 print("end")
Run Code Online (Sandbox Code Playgroud)

但是当我从Eclipse运行代码时,我在屏幕上得到以下内容:

begin
end
Printf function 1
Printf function 2
Printf function 3
Run Code Online (Sandbox Code Playgroud)

...以及TEST.txt中的以下内容

python print
Run Code Online (Sandbox Code Playgroud)

当我从cmd运行它时,这就是屏幕上的内容:

begin
end
Run Code Online (Sandbox Code Playgroud)

..这是在TEST.txt中:

python print
Run Code Online (Sandbox Code Playgroud)

当我评论出第二个dup2()陈述时,例如

import os, sys
from ctypes import *
if __name__ == '__main__':

    print("begin")
    saved_stdout=os.dup(1)
    test_file=open("TEST.TXT", "w")
    os.dup2(test_file.fileno(), 1)
    test_file.close()
    print("python print")
    cdll.msvcrt.printf(b"Printf function 1\n") …
Run Code Online (Sandbox Code Playgroud)

python windows ctypes

9
推荐指数
1
解决办法
2824
查看次数

标签 统计

ctypes ×1

python ×1

windows ×1