【发布时间】:2020-07-05 06:42:28
【问题描述】:
我知道有很多类似的问题,但我真的不知道我做错了什么。
我想要完成的事情是:从之前从.py 编译的.exe 文件中读取stdout。
这是执行子进程的主程序
from subprocess import Popen, PIPE, STDOUT
runcloud = Popen([r'demo2.exe'], stdout=PIPE)
with runcloud.stdout:
for line in iter(runcloud.stdout.readline, b''):
print(line) ##PRINTS NOTHING ??
这是编译前的.exe文件(demo2.exe)
import os
try:
print('RESPONSE')
except:
print('no connection')
os._exit(0)
对于某些实现,我需要编译demo2并添加os._exit()的最后一行
.虽然这个.exe 文件在 cmd 中运行时它确实显示了打印字符串。但无法使用subprocess从主程序打印
编辑:
在一些 cmets 之后,我在没有编译文件的情况下运行了代码,并添加了关键字 python,但仍然没有打印任何内容。
评论:即使我让它与 py 文件一起运行或者只是删除 os._exit(0),它仍然没有打印任何内容,请注意我的目录中没有其他同名的文件。
编辑 - 解决方法: 在找到解决方案数小时后,唯一的解决方法是在 exe 文件中编写代码保存(我认为我不能将其称为 '重定向')在另一个文件(如.txt)或简单设置数据库(如SQlite)上的输出,然后在主程序中调用Popen以使用.wait()执行exe并通过读取写入的值完成在文件或数据库上。
由于我还没有弄清楚为什么 Popen 没有在 stdout 中捕获 print 函数,并且已经可以在其他问题中找到解决方法,所以我暂时保留这个问题。强>
【问题讨论】:
-
请注意,您可以只使用
for line in runcloud.stdout:。 -
@MisterMiyagi 仍然没有打印
-
经过小幅修正以使此示例可运行(将
demo.exe更改为./demo2.py),我无法重现此问题。你如何编译文件?文件未编译时是否有效?由于指定的可执行文件没有路径,你确定你运行的是正确的demo2.exe吗? -
@MisterMiyagi 对不起,我忘记了 python 关键字,好的,所以我像使用 py 文件一样运行它。它仍然不打印任何内容。
标签: python python-3.x compilation subprocess stdout