考虑以下MWE:
#include <Python.h>
#include <stdio.h>
int main(void) {
printf("Test 1\n");
Py_Initialize();
printf("Test 2\n");
PyRun_SimpleString("print('Test 3')");
printf("Test 4\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我正常编译并运行时,我得到预期的输出:
$ ./test
Test 1
Test 2
Test 3
Test 4
Run Code Online (Sandbox Code Playgroud)
但是当我重定向输出时,我从python代码中得不到任何东西:
$ ./test | cat
Test 1
Test 2
Test 4
Run Code Online (Sandbox Code Playgroud)
怎么了?更重要的是,如何将我的python输出写入stdout,如预期的那样?
我有以下示例程序:
#include <stdio.h>
int
main(int argc, char ** argv){
char buf[100];
printf("Please enter your name: ");
fflush(stdout);
gets(buf);
printf("Hello \"%s\"\n", buf);
execve("/bin/sh", 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
我当我没有任何管道运行时,它应该工作,并返回一个shpromt:
bash$ ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
testName
Hello "testName"
$ exit
bash$
Run Code Online (Sandbox Code Playgroud)
但这不适用于管道,我想我知道为什么会这样,但我无法找到解决方案.示例运行波纹管.
bash$ echo -e "testName\npwd" | ./a.out
Please enter your name: warning: this program uses gets() which is unsafe.
Hello "testName"
bash$
Run Code Online (Sandbox Code Playgroud)
我认为这与以下事实有关:以一种接收EOF 的方式gets清空并且stdin在/bin/sh没有错误消息的情况下退出.
但是我如何解决这个问题(如果可能的话,不修改程序,如果没有gets …
这个命令有效
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2
Run Code Online (Sandbox Code Playgroud)
但这两个都失败了!
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2 "arg 3" arg4
START /b /wait "Dummy title" "C:\tmp\test runner2.bat" arg1 arg2 "arg 3"
Run Code Online (Sandbox Code Playgroud)
错误是:
'C:\tmp\test' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
显然它与讨论"这些论点有关,但为什么以及如何解决这个问题呢?
相关问题:
我需要生成在Windows系统上分别创建,修改和访问的所有文件的列表.
我在forfiles这里找到了命令http://technet.microsoft.com/sv-se/library/cc753551(v=ws.10).aspx但显然这不使用创建和访问的时间戳,我也需要那些(在单独的名单).
我也研究过使用该dir命令,但我只找到了对帮助部分中的排序和过滤的引用.
batch-file ×2
windows ×2
c ×1
command-line ×1
execve ×1
freebsd ×1
pipe ×1
python ×1
python-3.4 ×1
shell ×1
timestamp ×1