如何在Python中运行Golang可执行文件/与之交互?

如何在Python中运行Golang可执行文件/与之交互?,python,windows,go,command-line,Python,Windows,Go,Command Line,我在Windows上有一个名为cnki downloader.exe(此处开源:)的命令行Golang可执行文件。我想在Python中运行这个可执行文件,并与之交互(获取它的输出,然后输入一些东西,然后获取输出,等等) 这是一个命令行程序,所以我认为它与MSVC构建的普通Windows命令行程序相同。我的代码如下: # coding=gbk from subprocess import Popen, PIPE p = Popen(["cnki-downloader.exe"], stdin=

我在Windows上有一个名为
cnki downloader.exe
(此处开源:)的命令行Golang可执行文件。我想在Python中运行这个可执行文件,并与之交互(获取它的输出,然后输入一些东西,然后获取输出,等等)

这是一个命令行程序,所以我认为它与MSVC构建的普通Windows命令行程序相同。我的代码如下:

# coding=gbk

from subprocess import Popen, PIPE

p = Popen(["cnki-downloader.exe"], stdin=PIPE, stdout=PIPE)
#p = Popen(["WlanHelper.exe"], stdin=PIPE, stdout=PIPE )

p.stdin.write( 'XXXXXX\n' )
result1 = p.stdout.read() # <---- we never return here
print result1

p.stdin.write( '1\n' )
result2 = p.stdout.read()
print result2
#编码=gbk
从子流程导入Popen、PIPE
p=Popen([“cnki downloader.exe”],stdin=PIPE,stdout=PIPE)
#p=Popen([“WlanHelper.exe”],stdin=PIPE,stdout=PIPE)
p、 stdin.write('XXXXXX\n')
result1=p.stdout.read()#查看您正在使用的子流程模块的,似乎他们有一个关于使用stdout.read()和朋友的死锁的警告:

警告:使用stdout=PIPE和/或stderr=PIPE时,这将导致死锁 子进程生成足够的输出到管道,以便 等待OS管道缓冲区接受更多数据的块。使用 沟通()以避免这种情况


因此,也许可以尝试使用@captncraig的可能副本?

我认为解决方案需要将Golang编译到库中,而不是当前的可执行文件。有没有办法不更改Golang可执行文件的源代码?啊,也许你的目标应用程序处于go状态这一事实与你的问题无关。似乎在与python中的子进程交互时出现了一些问题。