我使用 JNI 在 C++ 程序中调用一些 Java 代码。我需要将一些文本从 Java 打印到 C++ 标准输出。
我该怎么做?
我尝试:System.out.println("sdf");在java中,什么也没有出现。
请帮助:D
我正在尝试使用with声明来抑制sys.stdout或sys.stderr单独使用。 我发现了一个不起作用的教程。我正在使用Python 3.6.4并且我认为该教程是Python 2.
我在 SO 上查了一下,发现了一些但应用程序不起作用或不适用于这种情况。
这不适用:Python subprocess supress stdout and stderr
无法使任何with语句起作用:
Suppress stdout / stderr print from Python functions
这适用于 fortran:在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出
from contextlib import contextmanager
@contextmanager
def suppress_console(file=sys.stdout):
with open(os.devnull, "w") as devnull:
old_file = file
file = devnull
try:
yield
finally:
file = old_file
with suppress_console():
print(1, file=sys.stdout)
# 1
Run Code Online (Sandbox Code Playgroud) 我正在交互式shell中执行bash命令
./somescript.sh
它给出了输出
OS platform is: linux2
killall agent
agent: no process killed
Run Code Online (Sandbox Code Playgroud)
其中第三行来自stderr.
但是当我在子shell中执行时
var=$('./somescript.sh' 2>&1)
agent: no process killed
OS platform is: linux2
killall agent
Run Code Online (Sandbox Code Playgroud)
为什么代理人:现在第一行没有打印过程?如何使它们保持一致以对齐它们?
编辑:但是当我这样做时,
var=$('./somescript.sh' 1>&2)
我可以看到它在bash调试模式下以正确的顺序给出输出.但它没有存储在变量var中.
以下命令:
ls > . 2> error
Run Code Online (Sandbox Code Playgroud)
印刷:
bash: .: Is a directory
Run Code Online (Sandbox Code Playgroud)
到终端。但是由于我将 stderr 重定向到“错误”,我希望这一行被写入错误而不是终端。
我一直在尝试使用 ForkExec() 但我无法完成这项工作,syscall.Stdout 和 os.Stdout 之间有区别吗?
这是我尝试运行的代码的一个小例子。
command := "/usr/bin/echo"
args := []string{"Hello there."}
attr := new(syscall.ProcAttr)
attr.Env = os.Environ()
attr.Files = []uintptr{uintptr(syscall.Stdin), uintptr(syscall.Stdout), uintptr(syscall.Stderr)}
pid , err := syscall.ForkExec(command, args, attr)
if err != nil {
log.Fatal(err)
}
fmt.Println(pid)
Run Code Online (Sandbox Code Playgroud)
输出未显示在屏幕上。
非常感谢您的帮助。
我需要将命令通过管道传输到批处理文件中并进行一些处理,同时保留原始命令的输出。因此,例如在运行以下命令时,输出仍然好像根本没有管道一样:
ping 127.0.0.1 -n 4 | my_process
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的最佳解决方法是/sf/answers/488642381/。但我的问题是我需要逐行输出。使用该解决方案,只有在执行完 ping 命令后才会刷新输出。我发现/sf/answers/1509727481/说这是因为in(在for in循环内)。
这是一行一行的例子:
ping 127.0.0.1 -n 4 | findstr $
Run Code Online (Sandbox Code Playgroud)
实际上,如果 Windows 是一个开源项目,我们可能会在findstr或类似命令中找到答案。
在不支持ANSI转义码的终端中,输出\033[0m这样的颜色控制码不仅没有任何效果,还会干扰终端。
我知道一个json格式化工具叫jq,它判断终端是否可以使用ANSI转义码。
我想知道,如何通过C语言实现这个功能?
我只想知道如果使用 1 个字节,换行符(即“\n”)是否只能写入标准输出,我的意思是,是否必须像这样调用换行符?
write(1, "\n", 1);
Run Code Online (Sandbox Code Playgroud)
或者可以这样称呼吗?
write(1, "\n", 0);
Run Code Online (Sandbox Code Playgroud) 想象一下,我在文件中有以下代码test.py:
for x in range(1,11):
print x
Run Code Online (Sandbox Code Playgroud)
这将打印:
$myuser: python test.py
1
2
3
4
5
6
7
8
9
10
$myuser:
Run Code Online (Sandbox Code Playgroud)
但是,我希望它打印:
$myuser: python test.py
1
2
3
4
5
6
7
8
9
10
$myuser:
Run Code Online (Sandbox Code Playgroud)
注意最后一个'\n'字符,在正常情况下缺少.我如何获得最后一个换行符?
我如何在python中的字符串中转义\n.
我怎么写python这个字符串中的stdin "abc\ndef"作为单个输入
Sys.stdout.write("abc\ndef")
Run Code Online (Sandbox Code Playgroud)
电流输出
import sys
>>> sys.stdout.write("abc\ndef")
abc
def
Run Code Online (Sandbox Code Playgroud)
我希望它是 abc\ndef