问题标签 [io-redirection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3725 浏览

python - 将嵌入式 Python IO 重定向到使用 AllocConsole 创建的控制台

我在将 Python IO 重定向到为我的 Win32 应用程序分配的控制台时遇到了一些问题。是否有我需要重定向的特定于 Python 的流?

这或多或少是我现在正在做的事情(删除了错误检查等):

如果我运行相同的东西,但作为控制台应用程序(Visual Studio 05,顺便说一句)并删除 AllocConsole 调用一切正常。有人知道我错过了什么吗?

编辑:只是为了澄清,我正在寻找一种从 C API 中做到这一点的方法。

另一个编辑:Alex 的解决方案是正确的,但是对于使用 Python 3.x 的任何人,您可能会注意到新 API 中缺少 PyFile_FromString 函数。虽然它可能不是最好的选择,但我发现这在 Python 3.x 中运行良好:

0 投票
9 回答
5138 浏览

c - 在 C 中,如何打印在 shell 中重定向为输入的文件的文件名

我想在标准输出上打印 inpfilename。我怎么做 ?我在这里先向您的帮助表示感谢...

0 投票
2 回答
150 浏览

io-redirection - 执行 unix 可执行文件时我可以给出什么参数

我突然想到以下命令可以在文本文件中打印输出。

但我仍然想知道 < infile.txt > 是干什么用的?

执行这个目标文件时我还能给出哪些其他参数?

0 投票
4 回答
4643 浏览

eclipse - 在 Eclipse 中运行程序时将标准输出与标准错误分开

我正在 Eclipse 中调试 Java 程序。该程序通常将二进制数据写入其标准输出,但它可以将错误消息和堆栈跟踪写入其标准错误流。

我想将二进制数据重定向到一个文件,同时继续在控制台中显示标准错误输出。从命令行运行时,这很简单。Eclipse下可以吗?

到目前为止,我只知道如何将标准输出和标准错误重定向到同一个文件。除了向程序添加新的命令行选项外,我看不到将两者分开的方法。


相关:Eclipse 中的 I/O 重定向?

0 投票
4 回答
2551 浏览

shell - 为什么在 Unix 中通过 I/O 重定向读写同一个文件会导致一个空文件?

如果我将命令的输出重定向到它读取的同一文件,则其内容将被删除。

谁能解释为什么?

0 投票
2 回答
3946 浏览

python - 如何在 Python 中重定向标准错误?通过 Python C API?

这是我最近的两个问题的组合:
[1] C 中的 Python 实例方法
[2]如何在 Python 中重定向 stderr?

我想从 python 脚本记录 stdout 和 stderr 的输出。

我想问的是,根据 [1] 创建一个新类型似乎相当复杂。如果不需要将新类型暴露给 Python,它是否简化了事情,即它只存在于 C 中?

我的意思是,当 Python 打印某些内容时,它会转到“Objects/fileobject.c”,然后在“PyFile_WriteObject”中检查是否可以写入其参数:

此外,可以像这样获得 stdout 和 stderr :

那么我的问题是,是否有可能构建满足上述'PyObject_GetAttrString(f,“write”)'并且可以调用的必要PyObject,以便我可以编写:

http://docs.python.org/c-api/sys.html?highlight=pysys_setobject#PySys_SetObject

这样,就不需要将新的“编写器类型”暴露给 Python 脚本的其余部分,所以我认为编写代码可能会更简单一些......?

0 投票
7 回答
53333 浏览

linux - 在 bash 脚本中动态重定向标准输入

我试图这样做来决定是否将标准输入重定向到文件:

但这不起作用,因为当变量 $input 为“&0”时,bash 将其解释为文件名。

但是,我可以这样做:

问题是 ./myScript 实际上是一个很长的命令行,我不想复制它,也不想为它创建一个函数,因为它也没有那么长(不值得)。

然后我想到这样做:

但这需要再运行一个命令和一个管道(即一个子shell)。
还有其他更简单、更高效的方法吗?

0 投票
3 回答
1549 浏览

visual-studio - 当我从 Perl 调用 cl.exe 时,为什么不生成任何输出?

我在运行 cl.exe 时遇到了一个奇怪的问题,这让我很困惑。在一个由 C/C++ 项目组成的大型 VS2008 解决方案中,我有一个项目运行一些脚本来做一些额外的处理。该项目包含一个预构建事件,该事件调用一个 Perl 脚本(ActiveState Perl 在机器上)。这个 Perl 脚本然后调用 cl.exe/E以生成重定向到文件的预处理输出。Perl 中的代码如下所示:

args.rsp是一个纯文本文件,其中包含一堆用于 cl.exe 的命令行参数,包括/E在 stdout 上获取预处理器输出。

从 VS2008 命令提示符运行时,这个确切的命令行按预期工作。在我的 Windows XP 机器上构建项目也可以正常工作。但是,在我的新 Windows 7 机器上,当我构建项目时,out.txt最终为空白。我还应该在我同事的一些 Windows 7 机器上添加它,它可以正常工作,而在其他一些机器上则不行。

显然存在某种配置差异,但我不知道它可能是什么。我们检查了 VS2008 SP1 和 ActiveState Perl 的匹配版本。我在 perl 脚本中尝试了无数的解决方法——使用system()而不是反引号,使用cl.exe /P输出到文件然后移动文件(文件为空白),取消设置VS_UNICODE_OUTPUT环境变量(无效)。没有任何改变行为 - 手动运行命令行时会生成输出,但在此项目的预构建事件中运行时不会生成输出。

关于什么样的配置问题可能导致这种情况的任何想法?我几乎没有追求的途径。

0 投票
2 回答
3070 浏览

c++ - 本机 C/C++ 中衍生进程的标准输入和输出的跨平台重定向(使用解决方案编辑)

我有一个字符串命令,我想在写入其输入和读取其输出时异步执行。听起来很简单,对,魔鬼就在跨平台。我的目标是 MSVC/Win32 和 gcc/Linux,显然希望编写最少数量的特定于平台的代码。我的 google-fu 让我失望了,我的查询噪音太大,所以我从我所知道的开始。

popen - 又好又简单,返回 FILE* 在任何地方都很容易使用。但这是MSDN 对 _popen 的看法

如果在 Windows 程序中使用,_popen 函数会返回导致程序无限期停止响应的无效文件指针。_popen 在控制台应用程序中正常工作。要创建重定向输入和输出的 Windows 应用程序,请参阅在平台 SDK 中创建具有重定向输入和输出的子进程。

所以 popen 是不可能的(编辑:因为我希望我的代码在 GUI 应用程序中工作)。在我看来,Windows 的做法相当丑陋和冗长。我可以使用特定于平台的生成代码,但我希望至少 I/O 代码是相同的。HANDLE但是,在这里,我在 WinAPI和 CFILE*以及int文件描述符之间碰壁了。有没有办法将a“转换”HANDLEFILE*intfd,反之亦然?(谷歌再次让我失望了,我尝试的所有关键字都被过度使用了)

有没有更好的方法用很少的特定于平台的代码来完成整个事情?

外部库并非不可能,但是依赖项维护很痛苦,尤其是在多个平台上,所以我想减少依赖项。我也没有在 boost 中找到这样的库。


只是为了记录,最后对我有用的东西。在 Windows/MSVC 上,CreatePipe()+如此CreateProcess()所述,使用后跟进入进程输入和输出。在 Linux/GCC 上,这里没有什么新鲜事,创建s; 然后是管道;; 在相关的文件描述符上。这样,只有进程生成代码是平台相关的(这没关系,因为在 Windows 上我想控制其他参数),写入输入和读取输出是通过标准和相关函数完成的。_open_osfhandle()_fdopen()FILE*pipe()fork()dup2()exec()fdopen()STARTUPINFOFILE*

0 投票
4 回答
3757 浏览

pipe - 通过 wget 获取内存并绕过磁盘写入

是否可以将网站的内容(一组 HTML 页面)直接下载到内存而不写入磁盘?

我有一个机器集群,每台机器安装了 24G,但我被磁盘配额限制为几百 MB。我正在考虑将输出重定向wget到某种内存结构而不将内容存储在磁盘上。另一种选择是创建我自己的版本,wget但可能有一种简单的方法来使用管道

还有什么是并行运行此下载的最佳方式(集群有> 20个节点)。在这种情况下不能使用文件系统。