如何将标准输出重定向到 CMD 中的程序?

Posted

技术标签:

【中文标题】如何将标准输出重定向到 CMD 中的程序?【英文标题】:How can I redirect standard output to a program in CMD? 【发布时间】:2021-01-21 15:49:46 【问题描述】:

我在命令提示符下运行这个:

python -c ""print("""Message from python""")"" | AcceptMessage.exe

但是,这不起作用。我收到消息:

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr

AcceptMessage.exe 接受一个参数。它所做的只是打印出传递给它的内容。这意味着,如果您通常通过AcceptArgument.exe argument_here 调用它,则输出将为argument_here。我已经测试了实际的程序,它可以正常工作,所以这不是问题。

总的来说,我对脚本编写很陌生,所以我很感激任何帮助。

【问题讨论】:

看起来像接受 exe 不读取输入流。您必须使用 for /f 捕获 python 输出并将其作为参数传递以接受 exe 类似for /f %q in (python -c ""print("""Message""")"") do AcceptMessage.exe %q?我刚收到"") was unexpected at this time. 【参考方案1】:

尝试这样(使用 .bat 扩展名保存脚本)

0<0# : ^
''' 
@echo off

for /f "tokens=* delims="  %%a in ('python "%~f0" %*') do (
    AcceptMessage "%%a"
)
exit /b 0
'''

print("message from python")

或类似:

@echo off

for /f "tokens=* delims=" %%a in ('"python -c ""print("""Message from python""")"""') do (
    acceptMessage "%%a"
)

如果你想直接从命令行运行它:

for /f "tokens=* delims=" %a in ('"python -c ""print("""Message from python""")"""') do @AcceptMessage "%a"

【讨论】:

以上是关于如何将标准输出重定向到 CMD 中的程序?的主要内容,如果未能解决你的问题,请参考以下文章

将命令行进程的标准输出重定向到文件

如何将 A 的标准输出重定向到 B 的标准输入,将 B 的标准输出重定向到 A 的标准输入?

exe文件的输出内容无法重定向到winform窗口中

如何将标准输出和标准错误重定向到 Python 中的记录器

如何将标准输出和标准错误重定向到 Python 中的记录器

重定向